Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229

Некорректно работают методы класса

12.06.2021, 18:50. Показов 1727. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ситуация такая: метод Size_Of_Packet запускается, но выводит некорректный результат. Он как будто вообще не понимает, какой разряд я ему написала и выводит везде b. С чем это может быть связано?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
 
namespace Lab5_Array
{
    class Packet
    {
        int letter; //размер сообщения
        string packet; //размер пакета
        int bytes; //байты (изменение размера пакета)
 
        public void Size_Of_Letter(int Letter)
        {
            letter = Letter;
        }
 
        public void Size_Of_Packet() //ввод пакета в байтах
        {
            string[] packet = Console.ReadLine().Split();
            int size = int.Parse(packet[0]);
            if (packet[1] == "Кb") size *= 1024;   
            if (packet[1] == "Мb") size *= 1048576;
            Console.WriteLine(size + " b");
        }
        public void Change_Size_Of_Packets(int size) //изменение размера пакета на заданное число байт
        {
            bytes = Convert.ToInt32(Console.ReadLine());
            size += bytes;
            Console.WriteLine(size + " b");
        }
        public void How_Many_Packets(int letter, int size)
        { 
            letter /= size;
            Console.WriteLine(letter + " packets");
        }
    }
    class Program
    {
        public static void Main()
        {
            Packet start = new Packet();
            Console.WriteLine("Write size of letter: ");
            start.Size_Of_Letter(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine("\n\n");
            Console.WriteLine("Write size of packet: ");
            start.Size_Of_Packet();
            Console.WriteLine("\n\n");
            Console.WriteLine("Write byte (change size of packets): ");
            start.Change_Size_Of_Packets(Convert.ToInt32(Console.ReadLine()));
        }
    }
}
}
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2021, 18:50
Ответы с готовыми решениями:

Некорректно работают конструкторы класса
Суть задания. Определите иерархию классов (точка-круг-конус), связанных отношением наследования. Определите в этих классах методы,...

Некорректно работают потоки
В общем мне нужно сделать задание - рассчитать детерминант матрицы. Пользуюсь стандартным алгоритмом. Решил распаралеллить вычисления,...

Обращение к элементам класса (поставив точку, показать свойства и методы класса)
Есть класс Audio, у него есть две основных задачи воспроизводить и записывать звук (Recorder/Player). Хотелось бы, что бы все методы и...

11
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.06.2021, 23:03
Скопа, потому что у вас буквы К и М в Кb и Мb в условиях - кириллические, а в консоль вы вводите латинские, вот условия и не проходят.
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
13.06.2021, 07:56  [ТС]
kolorotur, вот оно как) не обратила внимания. Но у меня ещё не работают другие методы в коде.
Вот эти два последних метода:
Я приложила ниже скриншот результата.

C#
1
2
3
4
5
6
7
8
9
10
public void Change_Size_Of_Packets(int size) //изменение размера пакета на заданное число байт
        {
            bytes += size;
            Console.WriteLine(bytes + " b");
        }
        public void How_Many_Packets(int letter)
        {
            letter /= size;
            Console.WriteLine(letter + " packets");
        }
0
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
13.06.2021, 08:07  [ТС]
Извиняюсь, скриншот не прикрепился и письмо больше не редактируется.
В общем я решила убрать параметры и аргументы из метода How_Many_Packets и отредактировала тот кусок с кодом, который кидала вам выше.
Сейчас он выглядит так:


C#
1
2
3
4
5
6
7
8
9
10
11
public void Change_Size_Of_Packets(int bytes) //изменение размера пакета на заданное число байт
        {
            bytes += size;
            Console.WriteLine(bytes + " b");
        }
        public void How_Many_Packets() 
        {
            letter /= bytes;
            Console.WriteLine(letter + " packets");
        }
    }
Запуск выглядит так:

C#
1
2
3
4
start.Change_Size_Of_Packets(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine("\n\n");
            Console.WriteLine("How many packets?");
            start.How_Many_Packets();
Метод Change_Size_Of_Packets должен к значению size (тому, которое я перевожу в байты) прибавить новое значение, введённое с клавиатуры, и показать результат на экране. Это переменная bytes.
Метод How_Many_Packets должен letter (первое значение на консоли) разделить на bytes и присвоить себе новое значение. Затем оно выводится на экран.

На случай, если вам будет нужен итоговый код целиком с изменениями, вот он:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
 
namespace Lab5_Array
{
    class Packet
    {
        int letter; //размер сообщения
        string packet; //размер пакета
        int bytes; //байты (изменение размера пакета)
        int size;
 
        public void Size_Of_Letter(int Letter)
        {
            letter = Letter;
        }
 
        public void Size_Of_Packet() //ввод пакета 
        {
            string[] packet = Console.ReadLine().Split();
            int size = int.Parse(packet[0]);
            if (packet[1] == "Kb") size *= 1024;
            if (packet[1] == "Mb") size *= 1048576;
            Console.WriteLine(size + " b");
        }
        public void Change_Size_Of_Packets(int bytes) //изменение размера пакета на заданное число байт
        {
            bytes += size;
            Console.WriteLine(bytes + " b");
        }
        public void How_Many_Packets()
        {
            letter /= bytes;
            Console.WriteLine(letter + " packets");
        }
    }
    class Program
    {
        public static void Main()
        {
            Packet start = new Packet();
            Console.WriteLine("Write size of letter: ");
            start.Size_Of_Letter(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine("\n\n");
            Console.WriteLine("Write size of packet: ");
            start.Size_Of_Packet();
            Console.WriteLine("\n\n");
            Console.WriteLine("Write byte (change size of packets): ");
            start.Change_Size_Of_Packets(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine("\n\n");
            Console.WriteLine("How many packets?");
            start.How_Many_Packets();
        }
    }
}
Миниатюры
Некорректно работают методы класса  
0
sleep
 Аватар для I can
4930 / 4590 / 840
Регистрация: 13.04.2015
Сообщений: 9,740
13.06.2021, 08:45
Цитата Сообщение от Скопа Посмотреть сообщение
public void Change_Size_Of_Packets(int bytes) //изменение размера пакета на заданное число байт
{
bytes += size;
Console.WriteLine(bytes + " b");
}
здесь же bytes - это параметр данного метода, переменная bytes класса Packet не изменится.
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
13.06.2021, 12:29  [ТС]
I can, а как тогда поправить? Сделать Bytes и bytes, как в случае с Letter и letter?
0
 Аватар для lovember
152 / 100 / 40
Регистрация: 14.10.2016
Сообщений: 379
13.06.2021, 12:36
Цитата Сообщение от Скопа Посмотреть сообщение
а как тогда поправить?
Можно написать
C#
1
this.bytes = bytes;
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
13.06.2021, 12:38  [ТС]
lovember, хорошо, а где надо прописывать эту переменную? В обоих методах (Change и How Many) или только в одном можно?
0
 Аватар для lovember
152 / 100 / 40
Регистрация: 14.10.2016
Сообщений: 379
13.06.2021, 12:48
Цитата Сообщение от Скопа Посмотреть сообщение
а где надо прописывать эту переменную?
this указывает на "этот" экземпляр класса. Если вы хотите изменить, например, свойство bytes, но при этом переменная справа от знака равенства имеет такое же имя, то нужно использовать this, чтобы компилятор понял, что вы хотите взять значение локальной переменной метода и передать его свойству класса.
Поэтому задача решать где это написать исключительно на вас. Если нужно менять свойство класса - присваивайте ему соответствующее значение, если просто использовать в формуле - используйте без this.

А вообще нужно придерживаться какого-нибудь правила для именования переменных, методов, классов, свойств.
Например так:

1. Use PascalCasing for class names, method names, properties, and constants.
a. internal class UserService
b. public string UserName { get; set; }
c. private void Calculate(int left, int right, char operator)
d. const string AdministratorName = “admin”;
e. public string ConnectionString;

2. Use camelCasing for local variables and method arguments.
a. static void Main(string[] args)
b. static void Main(string[] args){
int testCounter = 0;
}

3. Use leading underscore for private, protected, or internal variables
a. private ... double _defaultValue;
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
13.06.2021, 13:13  [ТС]
lovember, хорошо, я это запомню. Помогите мне поправить этот код, пожалуйста. Я немного изменила код в методе, но всё равно результат некорректный выводится.

C#
1
2
3
4
5
6
public void Change_Size_Of_Packets(int Bytes) //изменение размера пакета на заданное число байт
        {
            Bytes += size;
            bytes = Bytes;
            Console.WriteLine(bytes + " b");
        }
Результат в методе How_Many тоже некорректный выходит. Он должен делить на сумму size и bytes (которая вычисляется в методе Change), но делит только на bytes.

C#
1
2
3
4
5
public void How_Many_Packets()
        {
            letter /= bytes;
            Console.WriteLine(letter + " packets");
        }
Миниатюры
Некорректно работают методы класса  
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.06.2021, 13:24
Лучший ответ Сообщение было отмечено Скопа как решение

Решение

Скопа, как я понимаю, ты можешь делать как:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
 
namespace CsharpConsole
{
    class Packet
    {
        int letter; //размер сообщения
        string packet; //размер пакета
        int bytes; //байты (изменение размера пакета)
 
        public void Size_Of_Letter(int letter_)
        {
            letter = letter_;
        }
 
        public void Size_Of_Packet() //ввод пакета в байтах
        {
            string[] str = Console.ReadLine().Split();
            int size = int.Parse(str[0]);
            if (str[1] == "Kb" || str[1] == "kb") 
                size *= 1024;
            if (str[1] == "Mb" || str[1] == "mb") 
                size *= 1048576;
            bytes = size;
            packet = bytes.ToString() + " b";
            Console.WriteLine(packet);
        }
        public void Change_Size_Of_Packets(int size) //изменение размера пакета на заданное число байт
        {
            bytes += size;
            packet = bytes.ToString() + " b";
            Console.WriteLine(packet);
        }
        public void How_Many_Packets()
        {
            int numPackets = letter / bytes;
            Console.WriteLine(numPackets.ToString() + " packets");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Packet start = new Packet();
 
            Console.Write("Enter size of letter: ");
            start.Size_Of_Letter(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine();
 
            Console.Write("Enter size of packet: ");
            start.Size_Of_Packet();
            Console.WriteLine();
 
            Console.Write("Enter byte to change size of packets: ");
            start.Change_Size_Of_Packets(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine();
 
            Console.Write("How many packets: ");
            start.How_Many_Packets();
 
            Console.ReadKey();
        }
    }
}
Результаты примера:


Успехов !
0
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
13.06.2021, 13:27  [ТС]
Volga_, всё, я всё поняла!

Добавлено через 7 секунд
Спасибо всем огромное!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2021, 13:27
Помогаю со студенческими работами здесь

В приложенном коде требуется реализовать свойства для класса. Все методы класса оставить без изменения
Для этой программы требуется реализовать свойства для класса.Все методы класса оставить без изменения. Помогите пожалуйста если не...

Методы не работают
Нужна помощь! Пытаюсь разбить код на методы но столкнулся с парой ошибок, которые не знаю как исправить: using System; namespace...

Неправильно работают методы
Вообщем проблема в том что если сначала сгенерировать матрицу и выбрать ее транспонирование то работает правильно, но если сначала вывести...

Делегаты. Как работают методы
Добрый день! Начал изучать делегаты, т.к. для WPF необходимы события, которые и построены на делегатах. Вот изучал эту статью....

Методы add и sub работают неисправно
Не понимаю как реализовать методы, чтобы объект first не менялся в процессе class Matrix2x2 { public double matrix...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru