#c#
Вопрос:
Эй, у кого-нибудь есть решение для этого? Я не знаю, почему я продолжаю получать сообщение об ошибке, что main-cs и компиляция завершаются неудачно.
using System;
class MainClass {
public static void Main (string[] args) {
Console.WriteLine ("Length of Collatz Row");
int cn = Console.ReadLine();
CollatzListLength(cn);
}
public int CollatzListLength(n){
int number;
List<int> numbers = new List<int>();
while(n != 1){
if(n % 2 == 0){
number = n/2;
}
if(n%2 ==1){
number = n*3 1;
}
n = number;
numbers.Add(number);
}
return numbers.Count;
}
Комментарии:
1. Что делает функциональная консоль. Возврат строки чтения?
2. В следующий раз, пожалуйста, укажите точную ошибку, которую вы получили, вместо того, чтобы просто сказать «ошибка».
Ответ №1:
Console.ReadLine()
возвращает a string
, а не int.
CollatzListLength
должно быть static
, и параметр должен быть объявлен как int
n = number;
не работает, потому number
что может никогда не быть присвоено значение. Используйте else
вместо if (n % 2 == 1)
того, чтобы просто проверять другое возможное условие в любом случае.
В целом:
static void Main(string[] args)
{
Console.WriteLine("Length of Collatz Row");
if (int.TryParse(Console.ReadLine(), out int cn))
CollatzListLength(cn);
else
Console.WriteLine("Needs a number");
}
public static int CollatzListLength(int n)
{
int number;
List<int> numbers = new List<int>();
while (n != 1)
{
if (n % 2 == 0)
{
number = n / 2;
}
else
{
number = n * 3 1;
}
n = number;
numbers.Add(number);
}
return numbers.Count;
}
Хотя на самом деле я не проверял вменяемость кода.
Ответ №2:
Альтернатива, исправленная для компиляции без сообщений об ошибках:
using System;
using System.Collections.Generic;
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Length of Collatz Row");
int cn = int.Parse(Console.ReadLine());
int len = CollatzListLength(cn);
Console.WriteLine($"len {len}");
}
public static int CollatzListLength(int n)
{
int number = 0;
List<int> numbers = new List<int>();
while (n != 1)
{
if (n % 2 == 0)
{
number = n / 2;
}
if (n % 2 == 1)
{
number = n * 3 1;
}
n = number;
numbers.Add(number);
}
return numbers.Count;
}
}