C# Collatz — Кто-нибудь знает, как это исправить?

#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;
    }
}