【问题标题】:Duplicate elimination assignment重复消除分配
【发布时间】:2014-03-19 00:15:41
【问题描述】:

我目前正在网上报名参加初级 C# 编程课程。很难联系我的老师寻求帮助,我正在为这个当前的程序而苦苦挣扎,我非常接近,但我的解决方案必须 100% 匹配老师的解决方案。 我必须在列表当前努力没有​​成功之前移动错误消息。请帮助我知道这可能是一个愚蠢的错误,但我仍然是初学者。 到目前为止我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace midterm
{
class Program
{
    static void Main(string[] args)
    {
        int size;
        Console.WriteLine("How many numbers will you enter?");
        size = Convert.ToInt32(Console.ReadLine());
        int[] numbers = new int[size];
        int count = 0;

        while (count < size)
        {
            Console.Write("Enter number: ");
            int number = Convert.ToInt32(Console.ReadLine());

            if (number >= 10 && number <= 100)
            {
                bool containsNumber = false;


                for (int j = 0; j < count; j++)
                {
                    if (number == numbers[j])
                        containsNumber = true;


                    if (numbers[j] > 0)
                        Console.WriteLine("{0}", numbers[j]);
                }

                if (!containsNumber)
                {
                    if (count < numbers.Length)
                        numbers[count] = number;
                    Console.WriteLine(number);
                }
                 else
                {
                   Console.WriteLine("{0} has already been entered", number);
               }
                ++count;
            }
            else
                Console.WriteLine("number must be between 10 and 100");
        }

        Console.ReadLine();
    }
}
}

测试用例:

10
90
50
90
22
18
65
22
92
100
20

正确的解决方案:

How many numbers will you enter? 
Enter number: 90 
Enter number: 90 
50 
Enter number: 90 has already been entered
90
50
Enter number: 90
50
22
Enter number: 90
50
22
18
Enter number: 90
50
22
18
65
Enter number: 22 has already been entered
90
50
22
18
65
Enter number: 90
50
22
18
65
92
Enter number: 90
50
22
18
65
92
100
Enter number: 90
50
22
18
65
92
100
20

我的解决方案:

How many numbers will you enter?
Enter number: 90
Enter number: 90
50
Enter number: 90
50

90 has already been entered
Enter number: 90
50
22
Enter number: 90
50
22
18
Enter number: 90
50
22
18
65
Enter number: 90
50
22
18
65

22 has already been entered
Enter number: 90
50
22
18
65
92
Enter number: 90
50
22
18
65
92
100
Enter number: 90
50
22
18
65
92
100
20

【问题讨论】:

  • 您需要什么样的帮助?提示如何调试代码?
  • 你了解过 List 或 Linq 吗?如果是这样,有更简单的解决方案和什么版本的 C#?
  • 你知道,堆栈不是一个代码编写服务......你需要问一些具体的事情,否则你不会得到任何答案!
  • 我需要做的就是将错误消息“数字已输入”移动到列表之前而不是之后。
  • 我明白了 - 请注意,您帖子中 90% 的文字与您尝试解决的问题相关(例如“与老师交谈”、“C# 中的新内容”、 ...以及示例数据中的大量文本) - 如果您跳过所有这些文本,它会更容易阅读。

标签: c# arrays for-loop


【解决方案1】:

看来您将不得不移动/复制您的 for 循环:

if (number >= 10 && number <= 100)
{
   bool containsNumber = false;

   for (int j = 0; j < count; j++)
   {
       if (number == numbers[j])
            containsNumber = true;
   }

   if (!containsNumber)
   {
      if (count < numbers.Length)
            numbers[count] = number;
      Console.WriteLine(number);
   }
   else
   {
       Console.WriteLine("{0} has already been entered", number);
   }
   for (int j = 0; j < count; j++)
   {
       if (numbers[j] > 0)
          Console.WriteLine("{0}", numbers[j]);
   }
   ++count;

基本上,您需要在打印列表之前进行检查,但了解是否已输入数字的唯一方法是遍历列表。因此,您必须在检查重复后再次遍历列表以进行打印。

即使使用 IEnumerable.Contains(这是 Linq 的建议)也可以做到这一点,但它的性能会更高一些,并隐藏了丑陋的额外 for 循环。

如果您有任何问题,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多