我的java代码总是给我异常。当我键入单词stop时,如何防止此异常?
在确定有数字输入之前,不要将年龄解析为int 丑陋的代码;难以阅读。学习Sun Java编码标准,并为支架放置制定严格、一致的风格。IDE可以帮助实现这一点我的java代码总是给我异常。当我键入单词stop时,如何防止此异常?,java,Java,在确定有数字输入之前,不要将年龄解析为int 丑陋的代码;难以阅读。学习Sun Java编码标准,并为支架放置制定严格、一致的风格。IDE可以帮助实现这一点 Exception in thread "main" java.lang.NumberFormatException: For input string: "stop" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
Exception in thread "main" java.lang.NumberFormatException: For input string: "stop"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at BoxOfficeImproved.main(BoxOfficeImproved.java:14)
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)
import java.util.*;
导入java.io.*;
改进了公共类BoxOffice{
公共静态void main(字符串[]args)引发IOException{
扫描仪标准输入=新扫描仪(System.in);
字符串inData;
智力年龄;
对于(;;){
System.out.println(“输入您的年龄:”;
inData=stdin.nextLine();
if(inData.equalsIgnoreCase(“停止”)){
系统出口(1);
}否则{
age=Integer.parseInt(inData);//将inData转换为int
如果(70岁){
System.out.println(“成人价格的25%折扣”);
}否则{
系统输出打印项次(“成人费率”);
}
System.out.println(“享受表演”);//始终执行
}
}
}
}
关于如何写它,这里有另一个想法。我认为它更具可扩展性,更不冗长:
import java.util.*;
import java.io.*;
public class BoxOfficeImproved {
public static void main(String[] args) throws IOException {
Scanner stdin = new Scanner(System.in);
String inData;
int age;
for (;;) {
System.out.println("Enter your age:");
inData = stdin.nextLine();
if (inData.equalsIgnoreCase("Stop")) {
System.exit(1);
} else {
age = Integer.parseInt(inData); // convert inData to int
if (age <= 17) {
System.out.println("Child Rate");
if (age < 5) {
System.out.println("30 Percent discount from child rate");
}
} else if (age > 70) {
System.out.println("25 Percent discount from Adult Rate");
} else {
System.out.println("Adult rate");
}
System.out.println("Enjoy the show"); // always executed
}
}
}
}
/**
*更好的票房
*用户:mduffy
*日期:2014年11月17日
*时间:下午1:47
*@linkhttp://stackoverflow.com/questions/26979396/my-java-code-keep-giving-me-exceptions-how-do-i-prevent-this-exception-when-i-t/26979452#26979452
*/
导入java.io.IOException;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入java.util.Scanner;
改进了公共类BoxOffice{
私人静态地图结果;
静止的{
结果=新建LinkedHashMap(){{
看跌期权(5,“儿童利率的30%折扣”);
看跌期权(17,“儿童利率”);
put(71,“成年率”);
看跌期权(1000,“成人利率的25%折扣”);
}};
}
公共静态void main(字符串[]args)引发IOException{
扫描仪标准输入=新扫描仪(System.in);
字符串inData;
智力年龄;
做{
系统输出打印(“输入您的年龄:”;
inData=stdin.nextLine();
试一试{
年龄=整数.parseInt(inData);
System.out.println(getoutput(age));
System.out.println(“享受表演”);//始终执行
}捕获(数字格式){
System.out.println(String.format(“%s”不是有效期限;请重试”,inData));
}
}while(!“stop”.equalsIgnoreCase(inData));
}
公共静态字符串getOutput(int年龄){
for(int minAge:outlets.keySet()){
if(年龄
在检查是否是单词“Stop”之前,您试图将inData
解析为一个整数。尝试将“Stop”解析为整数会引发异常。改为在检查后尝试解析
/**
* A better box office
* User: mduffy
* Date: 11/17/2014
* Time: 1:47 PM
* @link http://stackoverflow.com/questions/26979396/my-java-code-keep-giving-me-exceptions-how-do-i-prevent-this-exception-when-i-t/26979452#26979452
*/
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
public class BoxOfficeImproved {
private static Map<Integer, String> OUTCOMES;
static {
OUTCOMES = new LinkedHashMap<Integer, String>() {{
put(5, "30 Percent discount from child rate");
put(17, "Child Rate");
put(71, "Adult rate");
put(1000, "25 Percent discount from Adult Rate");
}};
}
public static void main(String[] args) throws IOException {
Scanner stdin = new Scanner(System.in);
String inData;
int age;
do {
System.out.print("Enter your age:");
inData = stdin.nextLine();
try {
age = Integer.parseInt(inData);
System.out.println(getOutcome(age));
System.out.println("Enjoy the show"); // always executed
} catch (NumberFormatException e) {
System.out.println(String.format("'%s' is not a valid age; try again", inData));
}
} while (!"stop".equalsIgnoreCase(inData));
}
public static String getOutcome(int age) {
for (int minAge : OUTCOMES.keySet()) {
if (age < minAge) {
return OUTCOMES.get(minAge);
}
}
return String.format("No outcome found for age %d", age);
}
}
在检查输入的字符串是否为“停止”之前,请先将输入的字符串转换为
int
。只有在确定不想停止时,才能执行此操作:
inData = stdin.nextLine();
if (inData.equalsIgnoreCase("Stop")) {
System.exit(1);
} else {
age = Integer.parseInt(inData);
...
在else块中移动parse语句(Integer.parseInt(inData)
)
inData = stdin.nextLine();
if (inData.equalsIgnoreCase("Stop")) {
System.exit(1);
} else {
age = Integer.parseInt(inData); // convert inData to int
// rest of the code to handle age
age=Integer.parseInt(inData);//将inData转换为int
如何将stop
转换为int
?例外情况是stop
不是整数,它的字不能被integer.parseInt()方法解析。
inData = stdin.nextLine();
if (inData.equalsIgnoreCase("Stop")) {
System.exit(1);
} else {
age = Integer.parseInt(inData); // convert inData to int
// rest of the code to handle age
if (inData.equalsIgnoreCase("Stop")) {
System.exit(1);
} else {
age = Integer.parseInt(inData);
System.out.println("Child Rate");