我是一个java初学者,我正在学习管理异常和2d数组。我正在做一个练习,在二维数组中绘制不同车型的销售结果。
我混合了使用try-catch或抛出自定义异常来处理异常的方法。在自定义异常中,我有一个无法解决的问题。
卖方类:
在第16行,ide告诉我变量“correct”的初始值设定项为false是多余的
在第26行,ide告诉我while条件总是false。
我想在内部循环中声明boolean correct,以检查每个值的输入是否正确(整数),然后在尝试结束时将值更改为true,以防parseint成功。通过阅读ide中的注解,我了解到即使我选择了整数,布尔值correct也不会变为true,但我不明白为什么。
import java.util.Scanner;
public class Sellers {
public static void main(String[] args) throws NumberArrayException {
Scanner myObj = new Scanner(System.in);
int nbrOfSellers = CheckInput.control("Enter the number of sellers = ");
int nbrOfModels = CheckInput.control("Enter the number of models = ");
int[][] sales = new int[nbrOfSellers][nbrOfModels];
String[] nameOfSellers = Characters.construction("seller", nbrOfSellers);
String[] nameOfModels = Characters.construction("model", nbrOfSellers);
for(int i = 0; i < nbrOfSellers; i++) {
for(int j = 0; j < nbrOfModels; j++) {
boolean correct = false;
System.out.print("Enter the sales for the seller " + nameOfSellers[i] + " for the model " + nameOfModels[i] + " = ");
do {
try {
String input = myObj.nextLine();
sales[i][j] = Integer.parseInt(input);
correct = true;
} catch (NumberFormatException e) {
throw new NumberArrayException();
}
}while (!correct) ;
}
}
for(int i = 0; i < nbrOfSellers; i++) {
for(int j = 0; j < nbrOfModels; j++) {
System.out.print(sales[i][j] + " ");
}
System.out.println();
}
}
}
import java.util.Scanner;
public class Characters {
public static String[] construction(String character, int maxSize) {
Scanner myObj = new Scanner(System.in);
String[] myArray = new String[maxSize];
for(int i = 0; i < maxSize; i++) {
System.out.print("Enter the name of the " + character + " ");
myArray[i] = myObj.nextLine();
}
return myArray;
}
}
import java.util.Scanner;
public class CheckInput {
public static int control(String message) {
boolean correct = false;
int number = -1;
Scanner myObj = new Scanner(System.in);
do {
try {
System.out.print(message);
String input = myObj.nextLine();
number = Integer.parseInt(input);
correct = true;
} catch(NumberFormatException e) {
System.out.println("Enter a number");
}
}while(!correct);
return number;
}
}
public class NumberArrayException extends RuntimeException {
public NumberArrayException() {
super();
}
}
3条答案
按热度按时间nwsw7zdq1#
有两种方法可以退出while循环:
correct
为true或引发异常。从技术上讲,只能在语句上方的两行中抛出异常
correct = true
. 既然你在扔NumberArrayException
在循环内部,它要么因此退出,要么correct
将设置为真。当我们到达
while (!correct)
,那么correct
从设定开始就一直是真的。否则我们就会破例退出。因此,这个循环没有第二次迭代。要解决这个问题,可以避免在提供的输入无法解析时抛出异常。循环将允许用户输入另一个整数。
mlmc2os52#
当抛出异常时,它将退出函数并抛出异常。因此,与其在catch块中抛出异常,不如打印错误消息。以便用户理解错误并再次输入。
au9on6nz3#
你的代码很好,结构也很好。实际上,你应该比较一下
CheckInput.control
要了解为什么它没有提到的警告:初始化局部变量correct
如果输入无效,则不会抛出异常,从而允许用户进行更正。如果从内部抛出异常do-while
循环main
方法,然后false
的价值correct
从未使用过。您应该通过重用现有警告来解决这些警告
CheckInput.control
初始化2d时sales
数组。在创建时也有一个拼写错误nameOfModels
--nbrOfModels
应作为参数传递。