是否可以使用 Scanner 调用方法?

Is it possible to call a method using Scanner?

我是java的新手,刚刚学会使用方法。我写了一个简单的程序来转换温度:

public class TempConversion {

double temperature;

public TempConversion() {

}

public double celsiusToKelvin(double celsiusTemp) {
    temperature = celsiusTemp + 273.15;
    System.out.println("Converted temperature: " + temperature);
    return temperature;
}

public double celsiusToFahrenheit(double celsiusTemp) {
    temperature = celsiusTemp * 9 / 5 + 32;
    System.out.println("Converted temperature: " + temperature);
    return temperature;
}

public double fahrenheitToCelsius(double fahrenheitTemp) {
    temperature = (fahrenheitTemp - 32) * 5 / 9;
    System.out.println("Converted temperature: " + temperature);
    return temperature;
}

public double fahrenheitToKelvin(double fahrenheitTemp) {
    temperature = (fahrenheitTemp + 459.67) * 5 / 9;
    System.out.println("Converted temperature: " + temperature);
    return temperature;
}


public double kelvinToCelsius(double kelvinTemp) {
    temperature = kelvinTemp - 273.15;
    System.out.println("Converted temperature: " + temperature);
    return temperature; 
}

public double kelvinToFahrenheit(double kelvinTemp) {
    temperature = kelvinTemp * 9 / 5 - 459.67;
    System.out.println("Converted temperature: " + temperature);
    return temperature;     
}


public static void main(String[] args) {
    TempConversion temp = new TempConversion();

    temp.celsiusToFahrenheit(38);
    temp.celsiusToKelvin(0);
    
}

}

但是,现在,对于转换温度的程序,我必须调用代码本身中的每个方法。如果我理解正确,我可以使用 Scanner class 来获取用户输入,那么我如何在调用其中一种方法的同时还使用 Scanner 来获取用户输入。我不确定我的问题是否有道理,但如果有人问我,我可以尝试澄清一下。

也许这不是最好的解决方案,但我认为在 Java.

中解释 scanner 函数的用处非常形象

只需将其复制并粘贴到代码的 main 区域:


       public static void main(String[] args) {
        TempConversion temp = new TempConversion();
        temp.celsiusToFahrenheit(38);
        temp.celsiusToKelvin(0);

        Double number;
        String input;
        String output;

        Scanner sc = new Scanner(System.in);
        System.out.println("Input a number, only double allowed");

        number = sc.nextDouble();

        sc.nextLine();
        System.out
                .println("Input the first letter of the source unit. c for celsius, f for fahrenheit or k for kelvin");

        input = sc.nextLine();
        System.out
                .println("Input the first letter of the target unit. c for celsius, f for fahrenheit or k for kelvin");

        output = sc.nextLine();

        if (input.equals("c")) {
            if (output.equals("k")) {
                temp.celsiusToKelvin(number);
            } else if (output.equals("f")) {
                temp.celsiusToFahrenheit(number);
            }
        } else if (input.equals("f")) {
            if (output.equals("c")) {
                temp.fahrenheitToCelsius(number);
            } else {
                temp.fahrenheitToKelvin(number);
            }

        } else {
            if (output.equals("c")) {
                temp.kelvinToCelsius(number);
            } else {
                temp.kelvinToFahrenheit(number);
            }
        }
        sc.close();
    }

关于 Scanner 的实际工作原理 在互​​联网上很容易找到它,但是一旦你声明了一个 Scanner 对象就没有必要再声明一个新的 Scanner 每次你想为其他东西保存输入时,就像上面所做的那样,你可以多次重复使用它。

一旦您从一个对象更改为另一个对象(在这个问题中是保持双精度,现在我们想要一个字符串),您必须清除缓冲区(那里是 sc.nextLine(); 句子)。

而且,完成这一切后,记得关闭扫描仪。这不是强制性的,但如果不是,您将收到“警告”或类似信息。