Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的java代码总是给我异常。当我键入单词stop时,如何防止此异常?_Java - Fatal编程技术网

我的java代码总是给我异常。当我键入单词stop时,如何防止此异常?

我的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)

在确定有数字输入之前,不要将年龄解析为int

丑陋的代码;难以阅读。学习Sun Java编码标准,并为支架放置制定严格、一致的风格。IDE可以帮助实现这一点

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");