自定义异常捕获并向终端返回不正确的值
Custom Exception Catching and Returning Incorrect Values to The Terminal
使用此代码,我的 objective 将在终端中显示一组 ID 号,可以将其分配给 'grades'。创建它以便它可以处理异常并在发生异常时显示消息。在代码的最终输出中,数组中的所有五个变量都必须列出,超过“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);
}
}
永远不会抛出您的异常。 scores
数组的任何元素都没有赋值,因此它们保持为 0。因此表达式 scores[x]==HIGHLIMIT
永远不会为真。也不应该是scores[x] > HIGHLIMIT
吗?
您需要将输入分配给数组的当前索引。另外,如果出现异常,您需要减少计数器。
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
使用此代码,我的 objective 将在终端中显示一组 ID 号,可以将其分配给 'grades'。创建它以便它可以处理异常并在发生异常时显示消息。在代码的最终输出中,数组中的所有五个变量都必须列出,超过“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);
}
}
永远不会抛出您的异常。 scores
数组的任何元素都没有赋值,因此它们保持为 0。因此表达式 scores[x]==HIGHLIMIT
永远不会为真。也不应该是scores[x] > HIGHLIMIT
吗?
您需要将输入分配给数组的当前索引。另外,如果出现异常,您需要减少计数器。
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