[ C# / Java ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by procedure, 2 Nov 2008.

  1. Black3r

    Black3r New Member

    Joined:
    27 Dec 2013
    Messages:
    50
    Likes Received:
    4
    Reputations:
    0
    Вопрос,наверное, очень нубский, но хочется все-таки разъяснения.
    например у меня есть sbyte=-6; Нам нужно произвести сдвиг вправо на 2 разряда.
    P/S Старшие и знаковые разряды в графах переходов опущены
    Code:
    using System;
    namespace consoleApplication
    {
        class Programm
        {
            static void Main()
            {
                sbyte  d = -6;
                Console.WriteLine(d >> 1);//0110->0011   {Результат соответствует графу и равен -3)
                Console.WriteLine(d >> 2);//0110->0011->0001; { Результат не соответствует графу и равен -2)
    
                 
            }
        }
    }
    
    Что я не правильно понял об этой операции ?
     
  2. FiEnDDD

    FiEnDDD New Member

    Joined:
    1 Jul 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Code:
    #include "stdafx.h"
    #include <time.h>
    #include <conio.h>
    #include <stdio.h>
    #include <iostream>
    
    void main()
    {
        setlocale(0, "Russian");
    
        const int N = 100;
        int a[N], n;
        printf("Enter n<  %d", N);
        scanf_s("%d", &n);
        printf("\nМассив:\n");
        for (int i = 0; i < n; i++) //Генерируем массив случайных чисел в
            //диапазоне [0..50] и выводим на экран
        {
            a = rand() % 51;
            printf("%d%s", a, "  ");
            int max = a[0];
    
            for (int i = 0; i < 10; ++i)
            {
                if (a > max)
                {
                    max = a[N];
                    printf("%d%s", max, "");
                }
            }
    
                printf("\nСортированный:\n");
                bool f; int b;
                do
                {
                    f = false;
                    for (int i = 0; i<n - 1; i++)// Просматриваем весь массив
                    if (a>a[i + 1])
                    {
                        b = a;
                        a = a[i + 1];
                        a[i + 1] = b;
                        f = true; //Был обмен
                    }
                } while (f); // Проверяем, был ли хоть один обмен
                for (int i = 0; i < n; i++) // Выводим на экран отсортированный
                    //массив
                    printf("%d%s", a, "  ");
                _getch();
            }
    
    

    Ошибка 1 error C1075: конец файла обнаружен ранее, чем левая фигурная скобка "{" в "c:\users\fiend\desktop\consoleapplication1\consoleapplication1\consoleapplication1.cpp(8)" c:\users\fiend\desktop\consoleapplication1\consoleapplication1\consoleapplication1.cpp 51
    вроде все закрыто в чем дело?
     
    #1682 FiEnDDD, 1 Jul 2015
    Last edited: 2 Jul 2015
  3. Jerri

    Jerri Elder - Старейшина

    Joined:
    12 Jul 2009
    Messages:
    136
    Likes Received:
    377
    Reputations:
    22
    Серьезно? У тебя main() не закрыт.
    Code:
    void main()
    {
    
    И да, тег [ code ] [ /code ] используй.
     
    K800 likes this.
  4. FiEnDDD

    FiEnDDD New Member

    Joined:
    1 Jul 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    закрыт вроде.
     
  5. FiEnDDD

    FiEnDDD New Member

    Joined:
    1 Jul 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Простой выбор. Выбрать наибольший элемент массива и поменять его местами с последним (n–ным) элементом массива. Затем из n–1 первых элементов опять выбрать наибольший и опять поменять его местами с (n–1)–м. И так далее, пока весь массив не будет упорядочен.
    помогите с задачкой , сколько не пытался он не сортируется
     
  6. marynli

    marynli Banned

    Joined:
    29 Jun 2015
    Messages:
    26
    Likes Received:
    7
    Reputations:
    0
     
  7. piranha

    piranha New Member

    Joined:
    15 Jul 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    подскажите хорошую, доступную книгу по Java
     
  8. Jerri

    Jerri Elder - Старейшина

    Joined:
    12 Jul 2009
    Messages:
    136
    Likes Received:
    377
    Reputations:
    22
    piranha likes this.
  9. fen1xmv

    fen1xmv Member

    Joined:
    10 Feb 2011
    Messages:
    24
    Likes Received:
    6
    Reputations:
    0
    Герберт Шилдт - Java. Руководство для начинающих.

    А вообще вот _http://habrahabr.ru/post/153373/
     
    piranha likes this.
  10. Chernobyl

    Chernobyl New Member

    Joined:
    4 Aug 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Вопрос по C#, .NET 4.0

    Имеется некий класс, который должен быть потоко-безопасным. Класс содержит метод FindSessionIndexByToken, который ищет некое значение в массиве и возвращает его индекс.

    Code:
            public int FindSessionIndexByToken(int token)
            {
                lock (_lock)
                {
                    for (int i = 0; i < _sessions.Count; i++)
                    {
                        if (_sessions[i].Token == token)
                            return i;
                    }
                }
                return -1;
            }
    
    Вопрос: Если делать индексатор класса на подобии
    Code:
    public int this[int token]
    {
    get { return FindSessionIndexByToken(token); }
    }
    
    Надо ли пихать lock(_lock) в get, или lock который в методе сделает
    всю грязную работу ? Надо ли использовать lock в методе который только вызывает FindSessionIndexByToken и возвращает значение ? Есть ли тут подвох ?
     
    #1690 Chernobyl, 4 Aug 2015
    Last edited: 4 Aug 2015
  11. Dev.0x00

    Dev.0x00 Member

    Joined:
    14 May 2015
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Данный lock будет блокировать только эту часть кода, если есть вероятность того что _sessions будет изменен другим потоком в другом месте кода, то есть вероятность возникновения непредвиденного поведения. Блокируйте доступ к _sessions общим глобальным _lock везде, где к нему получают доступ потоки.
     
    Chernobyl likes this.
  12. Chernobyl

    Chernobyl New Member

    Joined:
    4 Aug 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Спасибо за ответ, Dev.0x00 ! Возможно, я неверно сформулировал свой вопрос. Переформулирую.

    Есть ли вероятность возникновения непредвиденного поведения в случае если единственное значение возвращаемое методом a является значение возвращаемое методом b при условии что lock находится в методе b и покрывает всё его "туловище" ?

    Смотреть http://forum.antichat.ru/threads/90173/page-85threads/90173/page-85#post-3876125
     
  13. BЭJI9I

    BЭJI9I New Member

    Joined:
    1 Apr 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Добрый день. Нужна ваша помощь по C#. Есть задача по автоматической смене номера COM порта. Много и долго гуглил, но нашёл смену через реестр, но возникла проблема с доступам к ветке HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\enum\. Подскажите, есть ли способ программно изменить права на эту ветку или есть ли другой способ по смене номеров COM портов?
     
  14. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
  15. BЭJI9I

    BЭJI9I New Member

    Joined:
    1 Apr 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
  16. Siegel

    Siegel New Member

    Joined:
    11 Aug 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Вопрос по c#, .NET 3.0

    Правильно ли воплощена поддержка многопоточности ?

    Знаю что в .NET 4.0 есть целый неймспейс System.Collections.Concurrent. Это не вариант.

    Code:
    using System.Collections.Generic;
    
    namespace ServerFramework.Shared
    {
        /// <summary>
        /// Thread-safe queue implementation
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class SafeQueue<T>
        {
            private Queue<T> _innerQueue;
            private bool _unique;
            private readonly object _lock;
    
            public int Count
            {
                get
                {
                    int count = 0;
                    lock (_lock)
                    {
                        count = _innerQueue.Count;
                    }
                    return count;
                }
            }
    
            public SafeQueue(bool unique)
            {
                _lock = new object();
                _innerQueue = new Queue<T>();
                _unique = unique;
            }
    
            /// <summary>
            /// Allow non-unique queue elements by default
            /// </summary>
            public SafeQueue() : this(false)
            {
    
            }
    
            public void Enqueue(T item)
            {
                lock(_lock)
                {
                    if (_unique && _innerQueue.Contains(item) == false)
                    {
                        _innerQueue.Enqueue(item);
                    }
                }
            }
    
            public bool TryDequeue(out T item)
            {
                item = default(T);
                bool result = false;
    
                lock (_lock)
                {
                    if (_innerQueue.Count > 0)
                    {
                        item = _innerQueue.Dequeue();
                        result = true;
                    }
                }
    
                return result;
            }
        }
    }
    
    
    
    Ещё вопрос по "потоко-безопасной" энумерации Collection<T>.
    Собственно имеется потоко-безопасный класс (обёртка Collection<T>), в котором необходимо реализовать IEnumerable.
    Как правильно реализовать IEnumerable так чтобы из нескольких потоков можно было крутить foreach в то время как из других идет запись/чтение ?

    Если делаю через простой копирующий конструктор, выбивает invalid operation (коллекция была изменена).

    На сколько я понимаю этот код должен создавать временную копию внутренней коллекции и возвращать её энумератор, однако выбивает exception, как и говорилось ранее.

    Code:
       public IEnumerator<T> GetEnumerator()
            {
                Collection<T> cloned = new Collection<T>(_innerCollection);
                return cloned.GetEnumerator();
            }
    


    А в тестовых потоках:
    Code:
    foreach(var item in WrapperClassInstance)
    {
    //...
    }
    
    Остальные потоки просто добавляют / убирают элементы из коллекции (через обертку, разумеется).

    В чём тут дело ?
     
    #1696 Siegel, 15 Aug 2015
    Last edited: 17 Aug 2015
  17. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите по C# есть библиотека SharpPcap.

    Там есть куча примеров. НО! Там всю информацию выводят в консоль. Подскажите как вывести ее к примеру в ListBox который находиться на форме?! Данные обрабатываются в device_OnPacketArrival. Привожу пример.

    Code:
    using System;
    using System.Collections.Generic;
    using SharpPcap;
    using SharpPcap.LibPcap;
    using SharpPcap.AirPcap;
    using SharpPcap.WinPcap;
    
    namespace Example3
    {
        public class BasicCap
        {
            public static void Main(string[] args)
            {
                string ver = SharpPcap.Version.VersionString;
                Console.WriteLine("SharpPcap {0}, Example3.BasicCap.cs", ver);
    
                var devices = CaptureDeviceList.Instance;
    
                if(devices.Count < 1)
                {
                    Console.WriteLine("No devices were found on this machine");
                    return;
                }
    
                Console.WriteLine();
                Console.WriteLine("The following devices are available on this machine:");
                Console.WriteLine("----------------------------------------------------");
                Console.WriteLine();
    
                int i = 0;
    
                foreach(var dev in devices)
                {
                    Console.WriteLine("{0}) {1} {2}", i, dev.Name, dev.Description);
                    i++;
                }
    
                Console.WriteLine();
                Console.Write("-- Please choose a device to capture: ");
                i = int.Parse( Console.ReadLine() );
    
                var device = devices[i];
    
                device.OnPacketArrival +=
                    new PacketArrivalEventHandler( device_OnPacketArrival );
    
                int readTimeoutMilliseconds = 1000;
                if (device is AirPcapDevice)
                {
                    var airPcap = device as AirPcapDevice;
                    airPcap.Open(SharpPcap.WinPcap.OpenFlags.DataTransferUdp, readTimeoutMilliseconds);
                }
                else if(device is WinPcapDevice)
                {
                    var winPcap = device as WinPcapDevice;
                    winPcap.Open(SharpPcap.WinPcap.OpenFlags.DataTransferUdp | SharpPcap.WinPcap.OpenFlags.NoCaptureLocal, readTimeoutMilliseconds);
                }
                else if (device is LibPcapLiveDevice)
                {
                    var livePcapDevice = device as LibPcapLiveDevice;
                    livePcapDevice.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
                }
                else
                {
                    throw new System.InvalidOperationException("unknown device type of " + device.GetType().ToString());
                }
    
                Console.WriteLine();
                Console.WriteLine("-- Listening on {0} {1}, hit 'Enter' to stop...",
                    device.Name, device.Description);
    
                device.StartCapture();
    
                Console.ReadLine();
    
                device.StopCapture();
    
                Console.WriteLine("-- Capture stopped.");
    
                Console.WriteLine(device.Statistics.ToString());
    
                device.Close();
            }
    
            private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
            {
                // ВОТ ТУТ надо вывести на форму инфо
                var time = e.Packet.Timeval.Date;
                var len = e.Packet.Data.Length;
                Console.WriteLine("{0}:{1}:{2},{3} Len={4}",
                    time.Hour, time.Minute, time.Second, time.Millisecond, len);
                Console.WriteLine(e.Packet.ToString());
            }
        }
    }
     
  18. tailer73

    tailer73 New Member

    Joined:
    16 Sep 2015
    Messages:
    11
    Likes Received:
    4
    Reputations:
    0

    эм, стало интересно, я что то не правильно понял в вопросе или ListBox.addItem(item) уже не работает?
     
  19. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Он будет вас ругать т.к. это private static. А во вторых другой поток..
     
  20. Siegel

    Siegel New Member

    Joined:
    11 Aug 2015
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Вопрос по c#, .NET 4.0

    Как лучше всего обработать пакеты получаемые сервером от клиентов ? Имеет ли смысл делать это в нескольких потоках ?
     
Loading...
Similar Threads - Java начинающим задаем
  1. b3
    Replies:
    4
    Views:
    3,204