我是一个Java的初学者,我正在学习管理异常和2D数组。我正在做一个练习,在2D数组中绘制不同车型销售的结果。
我已经通过使用 try catch 或抛出自定义异常来混合处理异常的方法。在自定义异常中,我有一个无法解决的问题。
在卖家类别中:
我想在内部循环中声明布尔值正确,以检查每个值的输入是否正确(整数),然后在尝试结束时将值更改为true,以防parseInt成功。通过阅读IDE中的注释,我明白即使选择整数,布尔值正确值也不会更改为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();
}
}
当您抛出异常时,它会退出函数并抛出异常。因此,只需打印和错误消息,而不是在抓块中抛出异常。以便用户可以理解错误并再次输入输入。
do {
try {
String input = myObj.nextLine();
sales[i][j] = Integer.parseInt(input);
correct = true;
} catch (NumberFormatException e) {
System.out.println("Wrong input format. Please enter a number");
}
}while (!correct) ;
你的代码非常好,结构很好。实际上,您应该比较CheckInput.control
的来源,以了解为什么它没有上述警告:您将局部变量初始化为正确的
,并且在输入无效的情况下不会引发异常,从而让用户更正它。如果像在 main
方法中一样从 do-while
循环内部抛出异常,则永远不会使用 correct
的 false
值。
您应该通过在初始化 2D 销售
数组时重用现有的 CheckInput.control
来解决这些警告。创建nameOfModels
时还有一个拼写错误 - nbrOfModels
应该作为参数传递。
String[] nameOfSellers = Characters.construction("seller", nbrOfSellers);
String[] nameOfModels = Characters.construction("model", nbrOfModels);
for(int i = 0; i < nbrOfSellers; i++) {
for(int j = 0; j < nbrOfModels; j++) {
sales[i][j] = CheckInput.control("Enter the sales for the seller " + nameOfSellers[i] + " for the model " + nameOfModels[i] + " = ");
}
}
有两种方式可以退出此do-而循环:正确
为真或抛出异常。
从技术上讲,异常只能在语句correct=true
上方的两行中抛出。由于您在循环中抛出了NumberArrayException
,因此它将退出,或者correct
将设置为true。
当我们到达< code>while(!correct),那么< code>correct自设置以来始终为真。否则我们将会异常退出。因此,这个循环永远不会有第二次迭代。
要修复它,您可以避免在无法解析提供的输入时引发异常。然后,循环将允许用户输入另一个整数。
do {
try {
String input = myObj.nextLine();
sales[i][j] = Integer.parseInt(input);
correct = true;
} catch (NumberFormatException e) {
// output error message for the user here
}
} while (!correct);
*编辑:好的,在修复了try catch错误后,我在< code>catch {..打印时。*,基本上,当我说我想再玩一次时,它会继续游戏,但它也会打印第一个< code>catch,然后在第23行要求输入。 嗨,这是我的第一篇文章,所以如果我在论坛上的代码格式错误,我会编辑它。 现在我正在用java eclipse编写一个游戏,其中cpu生成一个数字,用户必须猜测它。我大部分时间都在使用扫描仪类
问题内容: 我有这个代码 有人可以告诉我我在这里到底在做什么错,我该如何纠正?我只需要将所有数组元素初始化为布尔型false。谢谢 问题答案: 我只需要将所有数组元素初始化为布尔型false。 请改用任一方法,以便所有值默认为: 或者 使用填充整个数组: 另请注意,数组索引基于零。该行如你有会导致。要了解有关Java中数组的更多信息,请查阅此基本Oracle教程。
问题内容: 这里的Python新手非常抱歉,我确定这是一个愚蠢的问题,但是我似乎无法在要求我使用while循环检查有效用户输入的教程中解决以下挑战。 (使用Python2.7) 这是我的代码,但无法正常工作: 上面打印输出到控制台: 这显然是不正确的-循环应该在用户输入“ y”或“ n”时结束,但是我不确定如何执行此操作。我在这里做错了什么? 注意:挑战要求我同时使用运算符和 问题答案: 较短的解
因此,我对python(在Spyder IDE3.8中使用Python3)相对来说是个新手。我有下面的主要计算文件,其中几个函数汇集在一起,并循环通过。现在,我试图用等级函数来评估spray_pressure、spray_angle和particle_size的单个值是否在给定的边框中。如果不是,则0转到新数组,如果是,则实际值存储在新数组中。所以我想将所有的输出存储在4个新的数组spray_pr
问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车
我正在尝试创建一个检查整数的函数,并将继续循环,直到用户正确输入17或更高的整数。但是,如果我输入错误的输入,例如“K”或“