0

我有一个项目,我需要输入 -25 到 25 之间的数字并计算每个输入的次数。我的代码只接受正数。第 26 行和第 39 行给了我一些问题,我无法让我的数量数组保存任何负数。

我的代码:

public class PP62{

    public static void main(String[] args) {

        char response = 'a';
        int numbers[] = new int[100], count, amount[] = new int[100], n2;
        count = 0;

        do{

        if((response == 'y')||(response == 'Y')||(count == 0)){

            count++;

            System.out.println("Enter in an integer between -25 and 25.");
            do{
            numbers[count] = SavitchIn.readLineInt();

            if((numbers[count] > 25)||(numbers[count] < -25)){
                System.out.println("Error, Invalid Input. Re-Enter integer between -25 and 25.");
            }

            else if((numbers[count] <= 25)||(numbers[count] >= -25)){
                n2 = numbers[count];
                amount[n2]++;
            }

            }while((numbers[count] > 25)||(numbers[count] < -25));

            System.out.println("Enter in another integer? (Y/N)");
            response = SavitchIn.readLineNonwhiteChar();
        }

        else if ((response == 'n')||(response == 'N')){

            for(int a = -25; a <= 25; a++){
                System.out.println(a + "'s entered: ");
                System.out.println(amount[a] + "\n");
            }
            System.exit(0);
        }

        else{
            System.out.println("Incorrect Input. Must be 'Y' (yes) or 'N' (no).");
            response = SavitchIn.readLineNonwhiteChar();
        }}while(count > 0);
    }   
}
4

3 回答 3

0

在您的代码中

else if((numbers[count] <= 25)||(numbers[count] >= -25)){
                n2 = numbers[count];
                amount[n2]++;
            }

万一n2 = numbers[count] = -25呢?n2将是负数并amount[n2]++访问具有负索引的数组。您不能访问具有负索引的数组,这样做会导致java.lang.ArrayIndexOutOfBoundsException

我们为什么不使用具有大小50和计数的数组a[n2+25]++来代替!

于 2013-10-17T01:11:03.063 回答
0

java中的数组索引不能为负数,所以需要从0开始修复

像这样:

char response = 0;
int numbers[] = new int[51];

do
{
    System.out.println("Enter in an integer between -25 and 25.");
    int n = SavitchIn.readLineInt();
    if( (n > 25) || (n < -25))
        System.out.println("Error, Invalid Input. Re-Enter integer between -25 and 25.");
    else
        numbers[n+25]++;

    System.out.println("Enter in another integer? (Y/N)");
    do
    {
        response = SavitchIn.readLineNonwhiteChar();
        if ( (Character.toLowerCase(response) != 'y') && (Character.toLowerCase(response) != 'n') )
            System.out.println("Incorrect Input. Must be 'Y' (yes) or 'N' (no).");
    } while ( (Character.toLowerCase(response) != 'y') && (Character.toLowerCase(response) != 'n') );
} while (Character.toLowerCase(response) == 'y');

for(int a = -25; a <= 25; a++)
    System.out.println(a + "'s entered: " + numbers[25+a] + " times\n");
于 2013-10-17T01:18:08.550 回答
-1

我无法测试代码,因为我没有 SavitchIn 类,但我注意到该行

amount[n2]++;

会在某个时候尝试用负数索引一个数组。数组索引从 0 开始。我会推荐

amount[n2+25]++;

进而

System.out.println(amount[a-25]+"\n");

在显示器上。也就是说,将要表示的数字 (-25..25) 移动到数组可以处理的范围 (0..50)。

于 2013-10-17T01:11:51.490 回答