将方法调用到主方法中

时间:2014-03-26 02:21:40

标签: java methods

我知道这应该很简单,但我似乎无法找到我的错误,我知道它是一个运行时错误导致当我运行程序它开始询问你想要做什么转换然后你输入数字和然后发生错误。我们在课堂上拍摄时没有太大麻烦但是......我尝试了几种不同的东西,包括

public static double hourstominutes(){
    double minutes, hours;
    Scanner input = new Scanner (System.in);

    System.out.println ("Enter number of hours:  ");
    hours = input.nextInt();
    input.close();

    minutes = (double)hours * (double)60;
    return minutes;

    }

但是没有用,我认为这更糟糕的是因为我必须改变其他一大堆。

import java.util.Scanner;


public class TimeConverter{
public static void hourstominutes(){
    double minutes, hours;
    Scanner input = new Scanner (System.in);

    System.out.println ("Enter number of hours:  ");
    hours = input.nextDouble();
    input.close();

    minutes = (double)hours * (double)60;
    System.out.println("There are " + minutes + " minutes in " + hours + " hour(s");

    }
public static void minutestohours(){
    double minutes, hours;
    Scanner input = new Scanner (System.in);

    System.out.println ("Enter number of minutes:  ");
    minutes = input.nextDouble();
    input.close();

    hours = (double)minutes / (double)60;
    System.out.println("There are " + hours + " hours in " + minutes + " minutes");
}
public static void daystohours(){
    double days, hours;
    Scanner input = new Scanner (System.in);

    System.out.println("Enter number of day: ");
    days = input.nextDouble();
    input.close();

    hours = (double)days * (double)24;
    System.out.println("there are " + hours + " hours in " + days + "days");
}
public static void hourstodays(){
    double days; 
    double hours;
    Scanner input = new Scanner (System.in);

    System.out.println("Enter hours of day: ");
    hours = input.nextDouble();
    input.close();

    days = (double)hours / (double)24;
    System.out.println(days);
}
public static void main (String [] args){
    int option;
    Scanner input = new Scanner (System.in);

    System.out.println ("Please which conversion you would like to perform");
    System.out.println ("1. hours to minutes ");
    System.out.println ("2. minutes to hours");
    System.out.println ("3. days to hours");
    System.out.println ("4. hours to days");
    option = input.nextInt();
    input.close();

    if (option == 1){
        {hourstominutes();}
    }else if (option == 2){
        minutestohours();
    }else if (option == 3){
        daystohours();
    }else if (option == 4){
        hourstodays();
    }else {
        System.out.println("That is not a choice, enter a numerical value");
    }
}

}

我知道这是我的作业,人们说不要发布hw,但我完成了它的错误,我不知道该找什么。

提前感谢Stack over flow系列

3 个答案:

答案 0 :(得分:1)

我认为这是因为当您关闭输入对象时,也会关闭System.in。当您再次使用System.in新建一个扫描仪对象时,您将获得java.util.NoSuchElementException。 如果您使用静态扫描程序对象并在程序的最后关闭它应该会更好。 希望这可以帮到你。

答案 1 :(得分:1)

我已对此进行了测试,但确实有效。

一些事情......

1: 尽量不要让你的方法都是静态的,我知道它要求你,因为你不能从静态main调用非静态方法,但这意味着你应该实例化你的类,并使用该对象来访问方法

2: Scanner类使用内部缓冲区。您在Factory类中创建一个Scanner对象。此扫描程序从底层FileInputStream读取到其自己的缓冲区。 第一个Scanner已经消耗了该FileInputStream中的所有内容。

快速解决方法是使用相同的扫描仪对象,(因为所有方法都使用扫描仪,在类范围内定义扫描仪:

Scanner input;
...
...
public static void main (String [] args){
input = new Scanner (System.in);
...
...

然后只使用所有方法的输入,这将解决您的问题。 但请记住不要让你所有的方法静止只是因为日食问你。 实例化该类。

祝你好运伴侣:)

提示: 尝试在作业中使用Scanner.nextLine(),然后使用Double.parseDouble()

将字符串解析为双精度

答案 2 :(得分:0)

如果使用switch语句,在您的选择中会更容易 selection = input.Text 开关(选择) { 案例' 1': 小时(); 打破;

默认  东西(); 打破 }