0

我正在做一个家庭作业问题,我需要编写一个输入五个数字的应用程序,每个数字都在 10 到 100 之间,包括 10 到 100。在读取每个数字时,仅当它不与已读取的数字重复时才显示它。提供最坏的情况,其中所有五个数字都不同。使用尽可能小的数组来解决这个问题,并在用户输入每个新值后显示完整的唯一值集。

到目前为止,我所拥有的一切正常。只是,如果所有五个数字都是唯一的,一旦程序运行,我就会不断收到未处理的错误。它告诉我索引超出了数组的范围。只有我不确定它为什么这样做,而且我的 for 循环中看不到任何错误。

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

namespace Ten_Seven_Thirteen
{
class Program
{
    static void Main(string[] args)
    {
        const int SIZE = 5;
        int[] nums = new int[SIZE];
        int a;
        int b;
        int c = 0; //c is the amount of numbers currently entered
        int number;
        Console.WriteLine("Input five numbers between 10 and 100 (inclusive): \n");

        for (int count = 0; count < SIZE; count++)
        {

            number = Convert.ToInt32(Console.ReadLine());
            if (number >= 10 && number <= 100) //Verify whether or not the number meets the criteria
            {
                for (a = 0; a < c; a++)
                {

                    // The following if condition checks for duplicate entrees.
                    if (number == nums[a])
                    {
                        Console.WriteLine("Duplicate number.\n");
                        break; //Breaking the loop prevents the duplicate number from entering the array
                    } 

                } // end for

                // if number is not a duplicate, enter it in array
                if (number != nums[a])
                {
                    nums[c++] = number;
                } // end if - not duplicate

                Console.WriteLine("The non-duplicate values are:\n");

                //display array of unique numbers
                for (b = 0; nums[b] != 0 && b < SIZE; b++)
                {
                    Console.WriteLine(nums[b]);

                } // end for loop and display array 
            } // end if - validate and test
            else
                Console.WriteLine("invalid number.");
            Console.WriteLine("\n");

        } // end for - get 5 numbers 



      }
   }
}// end Ten_Seven_Thirteen
4

1 回答 1

4

那是因为这个代码..

for (b = 0; nums[b] != 0 && b < SIZE; b++)
{
    Console.WriteLine(nums[b]);
}

你不能在那里检查 nums[b] 。你需要想出一个更好的方法来切断它(我会把它留给你,因为这是家庭作业,或者你可以在评论中提问)。b 将转到 SIZE 然后它将检查 nums[SIZE] 并且 nums 中的最后一个索引是 SIZE - 1,所以你得到一个索引超出范围异常..

此外,此代码不起作用,因为它只提示您 5 次,无论它们是否唯一。尝试不同类型的循环。

另外...这有点偏离主题,但是由于您正在学习:将变量命名为有意义的名称。a, b, c 使其神秘且难以阅读。睡觉后你不会知道自己在做什么。更好的命名意味着您需要更少的注释,因为代码本身就是文档。专业代码中没有那么多注释,尽管高中老师告诉你有。

于 2013-10-07T01:30:53.640 回答