如何循环我的 java 税收计算器,以便它在抛出异常后重新启动?
How can I loop my java tax calculator so it restarts after throwing an exception?
我正在上 java 课程,但坚持练习。我创建了一个税收计算器,它根据用户输入的金额应用不同的税率,具体取决于金额所在的范围。计算器完全按预期工作。我添加了一个 try/catch 语句,以防万一有人输入文本而不是整数,它会抛出 NumberFormatException 并打印 'please introduce a valid number line'。我希望我的计算器循环回到第一个 System.out.println()
并在触发 NumberFormatException 时重新启动程序。我尝试使用布尔值通过 do/while 循环来完成它,但我无法让它工作。这是我的没有循环的计算器:
public class Application {
public static void main(String[] args) {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
Scanner reader = new Scanner(System.in);
int minimumAmount = 0;
int lowerLimit1 = 5000;
int higherLimit1 = 25000;
int lowerLimit2 = 25000;
int higherLimit2 = 55000;
int lowerLimit3 = 55000;
int higherLimit3 = 200000;
int lowerLimit4 = 200000;
int higherLimit4 = 1000000;
int gains = Integer.parseInt(reader.nextLine());
try {
if (gains > minimumAmount && gains < lowerLimit1) {
System.out.println("Tus ganancias están libres de impuestos.");
} else if (gains >= lowerLimit1 && gains < higherLimit1) {
float taxes = 8F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit1) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit1) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit2 && gains < higherLimit2) {
float taxes = 10F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit2) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit2) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit3 && gains < higherLimit3) {
float taxes = 12F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit3) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit3) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit4 && gains < higherLimit4) {
float taxes = 15F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit4) * (taxes / 100) + " euros."));
} else if (gains > higherLimit4) {
float taxes = 17F;
System.out.println("Tus ganancias han sido de " + (gains - higherLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - higherLimit4) * (taxes / 100) + " euros."));
}
} catch (NumberFormatException e) {
System.out.println("Por favor introduce un número válido.");
}
}
这就是我尝试循环播放的方式:
public class Application {
public static void main(String[] args) {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
Scanner reader = new Scanner(System.in);
int minimumAmount = 0;
int lowerLimit1 = 5000;
int higherLimit1 = 25000;
int lowerLimit2 = 25000;
int higherLimit2 = 55000;
int lowerLimit3 = 55000;
int higherLimit3 = 200000;
int lowerLimit4 = 200000;
int higherLimit4 = 1000000;
int gains = Integer.parseInt(reader.nextLine());
boolean isValid = true;
do {
try {
if (gains > minimumAmount && gains < lowerLimit1) {
System.out.println("Tus ganancias están libres de impuestos.");
} else if (gains >= lowerLimit1 && gains < higherLimit1) {
float taxes = 8F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit1) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit1) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit2 && gains < higherLimit2) {
float taxes = 10F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit2) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit2) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit3 && gains < higherLimit3) {
float taxes = 12F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit3) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit3) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit4 && gains < higherLimit4) {
float taxes = 15F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit4) * (taxes / 100) + " euros."));
} else if (gains > higherLimit4) {
float taxes = 17F;
System.out.println("Tus ganancias han sido de " + (gains - higherLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - higherLimit4) * (taxes / 100) + " euros."));
}
} catch (NumberFormatException e) {
System.out.println("Por favor introduce un número válido.");
isValid = false;
}
} while (isValid != false);
}
在这个循环中,try
部分工作得很好,但是一旦我输入文本控制台就会抛出这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "text"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:660)
at java.base/java.lang.Integer.parseInt(Integer.java:778)
at Application.main(Application.java:209)
我做错了什么?
您在 try/catch 之前收到 NumberFormatException,您需要将 int gains = Integer.parseInt(reader.nextLine());
移动到 try/catch 块,如下所示
do {
try {
int gains = Integer.parseInt(reader.nextLine());
if (gains > minimumAmount && gains < lowerLimit1) {
System.out.println("Tus ganancias están libres de impuestos.");
} else if (gains >= lowerLimit1 && gains < higherLimit1) {
float taxes = 8F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit1) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit1) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit2 && gains < higherLimit2) {
float taxes = 10F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit2) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit2) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit3 && gains < higherLimit3) {
float taxes = 12F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit3) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit3) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit4 && gains < higherLimit4) {
float taxes = 15F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit4) * (taxes / 100) + " euros."));
} else if (gains > higherLimit4) {
float taxes = 17F;
System.out.println("Tus ganancias han sido de " + (gains - higherLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - higherLimit4) * (taxes / 100) + " euros."));
}
} catch (NumberFormatException e) {
System.out.println("Por favor introduce un número válido.");
isValid = false;
}
} while (isValid != false);
您可以通过将此增益类型更改为 long 并从扫描仪读取 long 来避免此数字格式异常
do {
...
long gains = reader.nextLong();
...
} while(reader.hasNextLong());
你可以这样做。使用 Scanner.nextInt()
并继续处理,直到获得有效输入。
public static void main(String[] args) {
boolean notValid = true;
Scanner reader = new Scanner(System.in);
int minimumAmount = 0;
int lowerLimit1 = 5000;
int higherLimit1 = 25000;
int lowerLimit2 = 25000;
int higherLimit2 = 55000;
int lowerLimit3 = 55000;
int higherLimit3 = 200000;
int lowerLimit4 = 200000;
int higherLimit4 = 1000000;
int gains = 0;
while (notValid) {
try {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
gains = reader.nextInt();
notValid = false;
} catch (InputMismatchException e) {
System.out.println("Por favor introduce un número válido.");
reader.nextLine(); // clear input buffer
}
}
// rest of your code (conditionals and output) goes here.
您也可以将 try/catch 替换为以下内容:
while (notValid) {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
if (reader.hasNextInt()) {
gains = reader.nextInt();
notValid = false;
} else {
System.out.println("Por favor introduce un número válido.");
reader.nextLine(); // clear input buffer
}
}
我正在上 java 课程,但坚持练习。我创建了一个税收计算器,它根据用户输入的金额应用不同的税率,具体取决于金额所在的范围。计算器完全按预期工作。我添加了一个 try/catch 语句,以防万一有人输入文本而不是整数,它会抛出 NumberFormatException 并打印 'please introduce a valid number line'。我希望我的计算器循环回到第一个 System.out.println()
并在触发 NumberFormatException 时重新启动程序。我尝试使用布尔值通过 do/while 循环来完成它,但我无法让它工作。这是我的没有循环的计算器:
public class Application {
public static void main(String[] args) {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
Scanner reader = new Scanner(System.in);
int minimumAmount = 0;
int lowerLimit1 = 5000;
int higherLimit1 = 25000;
int lowerLimit2 = 25000;
int higherLimit2 = 55000;
int lowerLimit3 = 55000;
int higherLimit3 = 200000;
int lowerLimit4 = 200000;
int higherLimit4 = 1000000;
int gains = Integer.parseInt(reader.nextLine());
try {
if (gains > minimumAmount && gains < lowerLimit1) {
System.out.println("Tus ganancias están libres de impuestos.");
} else if (gains >= lowerLimit1 && gains < higherLimit1) {
float taxes = 8F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit1) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit1) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit2 && gains < higherLimit2) {
float taxes = 10F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit2) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit2) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit3 && gains < higherLimit3) {
float taxes = 12F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit3) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit3) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit4 && gains < higherLimit4) {
float taxes = 15F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit4) * (taxes / 100) + " euros."));
} else if (gains > higherLimit4) {
float taxes = 17F;
System.out.println("Tus ganancias han sido de " + (gains - higherLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - higherLimit4) * (taxes / 100) + " euros."));
}
} catch (NumberFormatException e) {
System.out.println("Por favor introduce un número válido.");
}
}
这就是我尝试循环播放的方式:
public class Application {
public static void main(String[] args) {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
Scanner reader = new Scanner(System.in);
int minimumAmount = 0;
int lowerLimit1 = 5000;
int higherLimit1 = 25000;
int lowerLimit2 = 25000;
int higherLimit2 = 55000;
int lowerLimit3 = 55000;
int higherLimit3 = 200000;
int lowerLimit4 = 200000;
int higherLimit4 = 1000000;
int gains = Integer.parseInt(reader.nextLine());
boolean isValid = true;
do {
try {
if (gains > minimumAmount && gains < lowerLimit1) {
System.out.println("Tus ganancias están libres de impuestos.");
} else if (gains >= lowerLimit1 && gains < higherLimit1) {
float taxes = 8F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit1) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit1) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit2 && gains < higherLimit2) {
float taxes = 10F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit2) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit2) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit3 && gains < higherLimit3) {
float taxes = 12F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit3) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit3) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit4 && gains < higherLimit4) {
float taxes = 15F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit4) * (taxes / 100) + " euros."));
} else if (gains > higherLimit4) {
float taxes = 17F;
System.out.println("Tus ganancias han sido de " + (gains - higherLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - higherLimit4) * (taxes / 100) + " euros."));
}
} catch (NumberFormatException e) {
System.out.println("Por favor introduce un número válido.");
isValid = false;
}
} while (isValid != false);
}
在这个循环中,try
部分工作得很好,但是一旦我输入文本控制台就会抛出这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "text"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:660)
at java.base/java.lang.Integer.parseInt(Integer.java:778)
at Application.main(Application.java:209)
我做错了什么?
您在 try/catch 之前收到 NumberFormatException,您需要将 int gains = Integer.parseInt(reader.nextLine());
移动到 try/catch 块,如下所示
do {
try {
int gains = Integer.parseInt(reader.nextLine());
if (gains > minimumAmount && gains < lowerLimit1) {
System.out.println("Tus ganancias están libres de impuestos.");
} else if (gains >= lowerLimit1 && gains < higherLimit1) {
float taxes = 8F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit1) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit1) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit2 && gains < higherLimit2) {
float taxes = 10F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit2) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit2) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit3 && gains < higherLimit3) {
float taxes = 12F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit3) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit3) * (taxes / 100)) + " euros.");
} else if (gains >= lowerLimit4 && gains < higherLimit4) {
float taxes = 15F;
System.out.println("Tus ganancias han sido de " + (gains - lowerLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - lowerLimit4) * (taxes / 100) + " euros."));
} else if (gains > higherLimit4) {
float taxes = 17F;
System.out.println("Tus ganancias han sido de " + (gains - higherLimit4) + " euros. Por tanto, con un " + taxes + "% de impuestos tendrás que pagar " + ((gains - higherLimit4) * (taxes / 100) + " euros."));
}
} catch (NumberFormatException e) {
System.out.println("Por favor introduce un número válido.");
isValid = false;
}
} while (isValid != false);
您可以通过将此增益类型更改为 long 并从扫描仪读取 long 来避免此数字格式异常
do {
...
long gains = reader.nextLong();
...
} while(reader.hasNextLong());
你可以这样做。使用 Scanner.nextInt()
并继续处理,直到获得有效输入。
public static void main(String[] args) {
boolean notValid = true;
Scanner reader = new Scanner(System.in);
int minimumAmount = 0;
int lowerLimit1 = 5000;
int higherLimit1 = 25000;
int lowerLimit2 = 25000;
int higherLimit2 = 55000;
int lowerLimit3 = 55000;
int higherLimit3 = 200000;
int lowerLimit4 = 200000;
int higherLimit4 = 1000000;
int gains = 0;
while (notValid) {
try {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
gains = reader.nextInt();
notValid = false;
} catch (InputMismatchException e) {
System.out.println("Por favor introduce un número válido.");
reader.nextLine(); // clear input buffer
}
}
// rest of your code (conditionals and output) goes here.
您也可以将 try/catch 替换为以下内容:
while (notValid) {
System.out.println("Por favor introduce el importe de las ganancias en euros.");
if (reader.hasNextInt()) {
gains = reader.nextInt();
notValid = false;
} else {
System.out.println("Por favor introduce un número válido.");
reader.nextLine(); // clear input buffer
}
}