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

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 に答える
0

あなたのコードで

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

もしもn2 = numbers[count] = -25n2は負になりamount[n2]++、負のインデックスで配列にアクセスします。負のインデックスを持つ配列にアクセスすることはできません。java.lang.ArrayIndexOutOfBoundsException

50代わりに sizeと count を持つ配列を使用してみませんかa[n2+25]++!

于 2013-10-17T01:11:03.063 に答える
-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 に答える