java—自定义异常捕获并向终端返回不正确的值

brvekthn  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(252)

有了这段代码,我的目标是在终端中显示一个id号数组,可以为其分配“等级”。创建它是为了处理异常并在发生异常时显示消息。在代码的最终输出中,必须列出数组中的所有五个变量,超过“100”的变量将列为“0”。问题是,每当引发此异常时,文本不会输出到终端,它也会将所有其余的“grades”设置为“0”。我想知道是否有任何方法可以避免这种情况,并让代码在“for”循环期间将消息输出到终端,以及避免将所有其他值替换为“0”以下是代码:

//ScoreException.Java
public class ScoreException extends Exception {
    public ScoreException(String s) {
        super(s);
    }
}
//TestScore.Java
import java.util.*;
public class TestScore {
    public static void main(String args[]) throws Exception {
        Scanner input = new Scanner(System.in);
        int[] ids = {1234, 2345, 3456, 4567, 5678};
        int[] scores = {0, 0, 0, 0, 0};
        String scoreString = new String();
        final int HIGHLIMIT = 100;
        String inString, outString = "";
        for (int x = 0; x < ids.length; ++x) {
            try{
                System.out.println("Enter score for student id number: " + ids[x]);
                inString = input.next();
                if(scores[x]>HIGHLIMIT){
                    throw new ScoreException("Score over 100");
                }
            }catch(ScoreException e){
                scores[x]=0;
                System.out.println("Score over 100");
            }
        }

        for (int x = 0; x < ids.length; ++x)
            outString = outString + "ID #" + ids[x] + "  Score " + scores[x] + "\n";
        System.out.println(outString);
    }
}
bqucvtff

bqucvtff1#

您需要将输入分配给数组的当前索引。此外,您还需要在异常情况下减少计数器。

import java.util.Scanner;

class ScoreException extends Exception {
    ScoreException(String message) {
        super(message);
    }
}

class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] ids = { 1234, 2345, 3456, 4567, 5678 };
        int[] scores = { 0, 0, 0, 0, 0 };
        final int HIGHLIMIT = 100;
        String outString = "";
        for (int x = 0; x < ids.length; ++x) {
            try {
                System.out.print("Enter score for student id number, " + ids[x] + ": ");
                scores[x] = input.nextInt();// Assign the input to the current index of the array
                if (scores[x] > HIGHLIMIT) {
                    throw new ScoreException("Score over 100");
                }
            } catch (ScoreException e) {
                System.out.println("Score over 100");
                --x;// Decrease the counter
            }
        }

        for (int x = 0; x < ids.length; ++x)
            outString = outString + "ID #" + ids[x] + "  Score " + scores[x] + "\n";
        System.out.println(outString);
    }
}

示例运行:

Enter score for student id number, 1234: 89
Enter score for student id number, 2345: 102
Score over 100
Enter score for student id number, 2345: 78
Enter score for student id number, 3456: 110
Score over 100
Enter score for student id number, 3456: 90
Enter score for student id number, 4567: 87
Enter score for student id number, 5678: 86
ID #1234  Score 89
ID #2345  Score 78
ID #3456  Score 90
ID #4567  Score 87
ID #5678  Score 86
ffdz8vbo

ffdz8vbo2#

不会抛出异常。任何元素都没有赋值 scores 数组,使它们保持为0。因此 scores[x]==HIGHLIMIT 从来都不是真的。也应该是吗 scores[x] > HIGHLIMIT ?

相关问题