Java中的转换程序错误

时间:2015-11-28 14:06:32

标签: java error-handling

今天早上我很无聊,所以我决定制作一个用户可以转换速度,质量,温度或长度的程序。我使用扫描仪和开关操作器来完成此操作。差不多,我让用户键入他们想要转换的内容,然后切换操作符根据答案运行某种方法。到目前为止,我只完成了Mass,这就是其他方法被注释掉的原因。代码和输出如下:

代码:

import java.util.Scanner;


public class Convertions {
public static void main(String[] args) {
    System.out.println("Would you like to convert: Mass, Temperature,\nLength, or Speed?");
    Scanner scan = new Scanner(System.in);
    String answer = scan.nextLine().toUpperCase();
    scan.close();
    switch(answer) {
        case "MASS":
            massConvert();
            break;
        case "TEMPERATURE":
            //tempConvert();
            break;
        case "LENGTH":
            //lengthConvert();
            break;
        case "SPEED":
            //speedConvert();
            break;
        default:
            System.out.println("Please enter something else!");
    }

}

public static double massConvert() {
    Scanner scanMass = new Scanner(System.in);
    System.out.println("1. kg to lbs\n2. lbs to kg");
    int answerMass = scanMass.nextInt();
    switch(answerMass) {
        case 1:
            System.out.println("Enter a value in kgs:");
            int kiloMass1 = scanMass.nextInt();
            scanMass.close();
            int poundMass1 = (int)((int)kiloMass1 * 2.2046);
            System.out.println(kiloMass1 + " kgs is equal to " + poundMass1 + " lbs");
            break;
        case 2:
            System.out.println("Enter a value in lbs:");
            int poundMass2 = scanMass.nextInt();
            scanMass.close();
            int kiloMass2 = (int)((int)poundMass2/2.2046);
            System.out.println(poundMass2 + " lbs is equal to " + kiloMass2 + " kgs");
            break;
    }
    return 0.0;
}
}

输出:

Would you like to convert: Mass, Temperature, 
Length, or Speed?
/*This wasn't in the output, but I just want to mention that the line with "Mass" was my input.*/
Mass
1. kg to lbs
2. lbs to kg
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Convertions.main(Convertions.java:14)

2 个答案:

答案 0 :(得分:5)

在阅读用户的第一个输入后,您将关闭链接到标准输入流的Scanner

scan.close();

这会导致stdin关闭,并且输入流的任何后续使用都会失败并出现异常。

要解决此问题,您应确保仅在不再需要输入时关闭Scanner

答案 1 :(得分:2)

如此简单,删除行

scan.close();//remove this

由于您在获得第一个输入后刚刚关闭扫描仪,下次您无法访问相同的输入时...

相关问题