【问题标题】:Divide or multiply each element of a List<int> every time a new number is added每次添加一个新数字时,除以或乘以 List<int> 的每个元素
【发布时间】:2021-10-27 05:22:11
【问题描述】:

输入:一次一个数字。

输出:输入的列表,其中每个偶数除以2,每个奇数乘以3。

步骤如下:

  1. 输入 4 作为输出 [2]
  2. 输入 8 得到输出 [1,4]
  3. 输入 9 并得到输出 [3,2,27]

这是我当前的代码:

List<int> nummerListe = new List<int>();

while (true)
{
    Console.WriteLine("Geben Sie die Zahlen ein : ");
    string eingabe = Console.ReadLine();
    int nummer = int.Parse(eingabe);

    Console.WriteLine("Die Zahlen sind : ");
    nummerListe.Add(nummer);
    
    for (int i = 1; i <= nummerListe.Count; i++)
    {
        Console.WriteLine(nummerListe[i]);
        Console.Write(" , ");
        if (nummer % 2 == 0)
        {
            nummer /= 2;
            Console.WriteLine(nummerListe[0] = nummer);
        }
        else
        {
            nummer *= 3;
            Console.WriteLine(nummerListe[0]=nummer);
        }
    }
    
    Console.WriteLine("  ");
}

【问题讨论】:

  • 为什么8输出两个数字?为什么 9 输出 3 个数字?
  • 前两行与要点相矛盾。你能edit这个问题并澄清一下吗?
  • 啊,我想我现在明白你的意思了,但第三个输入 (9) 不应该产生“[3,2,27]”吗?
  • @Llama 我猜这是因为每次您输入一个新号码时,都会对之前保存的所有号码再次执行所有操作。它没有解释为什么它是 [3, 2, 9] 而不是 [3, 2, 27]。
  • Console.WriteLine(nummerListe[0]=nummer) 似乎非常错误

标签: c# list integer operators


【解决方案1】:

您的代码存在一些问题:

  • 您从 1 而不是 0 开始循环,忽略第一个元素。

  • 您正在更改 nummer 而不是列表中的实际元素。

  • 您总是将nummer 的值分配给列表的第一个元素:nummerListe[0] = nummer

试试这样的:

List<int> nummerListe = new List<int>();

while (true)
{
    Console.WriteLine("Geben Sie die Zahlen ein : "); // Enter the number
    string eingabe = Console.ReadLine();
    int nummer = int.Parse(eingabe);  // Consider using int.TryParse() instead.
    nummerListe.Add(nummer);

    for (int i = 0; i < nummerListe.Count; i++)
    {
        if (nummerListe[i] % 2 == 0)
        {
            nummerListe[i] /= 2;
        }
        else
        {
            nummerListe[i] *= 3;
        }
    }

    Console.WriteLine("Die Zahlen sind : "); // Numbers
    Console.WriteLine(string.Join(",", nummerListe));
}

【讨论】:

  • 天啊。非常感谢,现在我的问题解决了
【解决方案2】:

首先,您需要了解 C# 列表是从 0 开始索引的,这意味着您的循环应该如下所示:

for (int i = 0; i < nummerListe.Count; i++)

而不是

for (int i = 1; i <= nummerListe.Count; i++)

那么你应该仔细检查一下:

Console.WriteLine(nummerListe[0] = nummer);

因为:
1 - 您必须将 0 替换为 i (nummerListe[i] = nummer)
2 - 您不想打印作业的结果(您目前正在打印)。

【讨论】:

    【解决方案3】:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class Program
    {
        public static void Main()
        {
            List<int> nummerListe = new List<int>();
            while (true)
            {
                Console.WriteLine("Geben Sie die Zahlen ein : ");
                string eingabe = Console.ReadLine();
                int nummer = int.Parse(eingabe);
                Console.WriteLine("Die Zahlen sind : ");
                nummerListe.Add(nummer);
                nummerListe = nummerListe.Select(n => (n % 2 == 0) ? n / 2 : n * 3).ToList();
                Console.WriteLine(String.Join(", ", nummerListe));
            }
        }
    }
    

    你可以试试online

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      相关资源
      最近更新 更多