#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)
{
...
}