0
import java.util.*;

public class ArrayExample {

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    boolean done = false;
    while (!done) {

        try {
            System.out.println("Please enter the size of the array:");
            String input = keyboard.next();

            int size = new Integer(input).intValue();
            int numbers[] = new int[size];

            for (int i = 0; i < 20; i++) {
                numbers[i] = i;
                done = true;
                System.out.println("Good.");
            }
        } catch (NumberFormatException ex) {
            System.out.println("NumberFormatException Error. Please enter a integer.");
        } catch (ArrayIndexOutOfBoundsException ex) {
            System.out.println("ArrayIndexOutOfBoundsException Error. Please enter 20 or higher.");
        } catch (NegativeArraySizeException ex) {
            System.out.println("NegativeArraySizeException Error. Please do not enter a negative.");
        }
    }
}
}

このプログラムを実行すると、正しく機能しません。INTEGER 20 以上を入力しない限り、例外をスローする必要があります。ただし、「Good」と出力されます。20 未満の数値を入力すると、19 を入力すると「Good」と出力されます。19回。3 を入力すると、「Good」と出力されます。3回。「Good」だけを印刷したい。20以上を入力した場合。そうでない場合は、例外をループし続ける必要があります。

4

5 に答える 5

0

これに答える最も簡単な方法は、コードを一通り見て、何が起こっているのかを正確に把握することです。簡単にするために、3 つ入力するとします。

import java.util.*;

public class ArrayExample {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        boolean done = false;  //ok so we set done to false
        while (!done) { //first time through, we are not done, so we enter the loop

            try {
                System.out.println("Please enter the size of the array:"); //you ask for a number 
                String input = keyboard.next(); //we put in '3'

                int size = new Integer(input).intValue(); //convert the input to an int
                int numbers[] = new int[size]; //we set the size to '3'

                for (int i = 0; i < 20; i++) { //we enter the loop, i is 0 so we continue
                    numbers[i] = i; //we set the value of idx 0 to 0
                    done = true; //we set done to true so we will exit the while loop
                    System.out.println("Good."); //we print good
                    //we increment i to 1
                }
                //EXPANDED LOOP FOR CLARITY
                for (int i = 0; i < 20; i++) { //second time, i is now 1
                    numbers[i] = i; //we set the value of idx 1 to 1
                    done = true; //we set done to true again (kind of redundant)
                    System.out.println("Good."); //we print good
                    //we increment i to 2
                }
                for (int i = 0; i < 20; i++) { //third time, i is now 2
                    numbers[i] = i; //we set the value of idx 2 to 2
                    done = true; //we set done to true again (still kind of redundant)
                    System.out.println("Good."); //we print good
                    we increment i to 3
                }
                for (int i = 0; i < 20; i++) { //fourth time, i is now 3
                    numbers[i] = i; //at this point we should throw an ArrayIndexOutOfBoundsException, so go to that catch statement
                    done = true; 
                    System.out.println("Good.");
                }

            } catch (NumberFormatException ex) {
                System.out.println("NumberFormatException Error. Please enter a integer.");
            } catch (ArrayIndexOutOfBoundsException ex) { //so here we catch the AIOB exception
                System.out.println("ArrayIndexOutOfBoundsException Error. Please enter 20 or higher."); //we print out an error, then continue
            } catch (NegativeArraySizeException ex) {
                System.out.println("NegativeArraySizeException Error. Please do not enter a negative.");
            }
            //here at the end of the block, we go back to check the while condition
            //we set done to true, so the while will fail and we will exit the program
        }
    }
}

それを考えると、出力は次のようになります。

Good
Good
Good
ArrayIndexOutOfBoundsException Error. Please enter 20 or higher.

それだけです。プログラムが行われます。出力を投稿していないため、これをさらにデバッグすることは困難です。

于 2013-09-15T18:39:53.323 に答える
0

私は完全には理解していませんでしたが、このプログラムで実行させたのは、数値が 20 未満の場合は ArrayIndexOutOfBoundsException をスローすることですが、数値が 20 以上の場合は "Good" を出力してこれまでの数値を表示することです。整数サイズの倍。また、for ループを強化された for ループに変更しました。

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    boolean done = false;
    while (!done) {

        try {
            System.out.println("Please enter the size of the array:");
            String input = keyboard.next();

            int size = new Integer(input).intValue();
            int numbers[] = new int[size];

            if(numbers.length >= 20) {
                for (int i : numbers) {
                    numbers[i] = i;
                    done = true;
                    System.out.println("Good.");
                }
            } else {
                throw new ArrayIndexOutOfBoundsException("ArrayIndexOutOfBoundsException Error. Please enter 20 or higher.");
            }
        } catch (NumberFormatException ex) {
            System.out.println("NumberFormatException Error. Please enter a integer.");
        } catch (NegativeArraySizeException ex) {
            System.out.println("NegativeArraySizeException Error. Please do not enter a negative.");
        }
    }
}
于 2013-09-15T17:10:47.983 に答える
0

の後に次の行を追加しますint size = new Integer(input).intValue();

if(size<20)
throw new ArrayIndexOutOfBoundsException("size is not equal to or greater than 20");

Size が 20 未満の場合、例外がスローされます。これらtrycatchメソッドを記述する必要はありません。

これがお役に立てば幸いです...

于 2013-09-15T19:49:02.910 に答える
0

以下のコードを試してください。指定された数値が 20 未満かどうかを確認し、コードのその部分が欠落している例外をスローする必要があります

import java.util.*;
public class ArrayExample {
private static Scanner keyboard;
public static void main(String[] args) throws Exception {
    keyboard = new Scanner(System.in);
    boolean done = false;
    while (!done) {

        try {
            System.out.println("Please enter the size of the array:");
            String input = keyboard.next();

            int size = new Integer(input).intValue();
            int numbers[] = new int[size];
            if(size <20){
                throw new Exception("Number less than 20");
            }

            for (int i = 0; i < 20; i++) {
                numbers[i] = i;
                done = true;
                System.out.println("Good.");
            }
        } catch (NumberFormatException ex) {
            System.out.println("NumberFormatException Error. Please enter a integer.");
        } catch (ArrayIndexOutOfBoundsException ex) {
            System.out.println("ArrayIndexOutOfBoundsException Error. Please enter 20 or higher.");
        } catch (NegativeArraySizeException ex) {
            System.out.println("NegativeArraySizeException Error. Please do not enter a negative.");
        }
    }
}
}
于 2013-09-15T17:08:16.820 に答える