как мне работать с левой стороной c#

#c#

Вопрос:

я хочу кое-что спросить. Мой скрипт выдает какую-то ошибку

Вот оно

 using System;

namespace 3nplus1
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Console.Write("Enter a number: ");
            int n  = Convert.ToInt32(Console.ReadLine());
            
            
            while (Convert.ToBoolean(n = 1))
            {
                if (Convert.ToBoolean(n % 2  = 0))
                   {
                    n = n / 2;
                    Console.WriteLine(n);
                }
                else
                {
                    n = 3*n   1;
                    Console.WriteLine(n);
                }
                
            }
            Console.WriteLine(n);
        }
    }
}
 

В сообщении об ошибке говорится:»/Ошибка CS0131: Левая часть назначения должна быть переменной, свойством или индексатором (CS0131) (3nplus1)

Ошибка находится в первой строке «если», пожалуйста, помогите. Спасибо и извините за плохой английский.

Комментарии:

1. — Обратись. Тобулеан(n = 1)’ неверно… используйте равный оператор == и лучше без Convert него . Просто n == 1

2. = это задание. Вероятно, вы хотите использовать оператор equals ==

Ответ №1:

Вы путаете = оператор(назначение) с == оператором, который используется для сравнения. Таким образом, это не сравнение, которое оценивается как истинное, а назначение(которое возвращает значение, которое вы назначаете).

 if (Convert.ToBoolean(n % 2  = 0))
 

но компилятор жалуется на это, потому что в левой части присваивания должно быть не выражение(как здесь), а переменная. Вам это тоже не нужно Convert.ToBoolean .

Ну, как уже было сказано, это просто последующая ошибка. Ты хочешь чего-то подобного:

 Console.WriteLine("Enter a number(exit with q): ");
string input = Console.ReadLine();
while (!input.Equals("q", StringComparison.OrdinalIgnoreCase))
{
    int n;
    while (!int.TryParse(input, out n))
    {
        Console.WriteLine("Enter a valid integer");
        input = Console.ReadLine();
    }
    int result = n % 2 == 0 ? n / 2 : 3 * n   1;
    Console.WriteLine(result);
    input = Console.ReadLine();
}
 

Ответ №2:

измените эту часть своего кода

 while (n != 1)
{
    if (n % 2 == 0)
    {
        n = n / 2;
        Console.WriteLine(n);
    }
    else
    {
        n = 3*n   1;
        Console.WriteLine(n);
    }   
}
 

Один = представляет собой назначение, однако в вашем случае вы хотите проверить равенство и, следовательно, использовать == оператор. Это устраняет необходимость в использовании Convert.ToBoolean .

Ответ №3:

С = помощью параметра вы присваиваете значение переменной или свойству. Но вы хотите провести сравнение по равенству, и для этого вы берете два == .

И, кстати, тебе это не нужно Convert.ToBoolean . Просто напиши:

 if (n % 2 == 0)
{
    ...
}