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

Is it possible to call a method using Scanner?

提问人:Anivartin Anand 提问时间:7/9/2020 最后编辑:Anivartin Anand 更新时间:7/9/2020 访问量:1481

问:

我是 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 类来获取用户输入,那么我如何在使用 Scanner 获取用户输入的同时调用其中一个方法。我不确定我的问题是否有意义,但如果被问到,我可以尝试澄清。

Java 方法 java.util.scanner user-input

评论

3赞 akuzminykh 7/9/2020
这回答了你的问题吗?如何使用 Java 中的 Scanner 类从控制台读取输入?
0赞 Anivartin Anand 7/9/2020
@akuzminykh确实如此,但不完全是。你能用我的代码来解释吗?
0赞 akuzminykh 7/9/2020
先自己尝试一下,然后发布你的尝试。相信我,通过这种方式你会学到更多。
0赞 Anivartin Anand 7/9/2020
@akuzminykh好的,我会努力的

答:

1赞 daenius 7/9/2020 #1

也许这不是最好的解决方案,但我认为它非常生动地解释了 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();
    }

关于实际工作原理 在互联网上很容易找到它,但是一旦你声明了一个对象,就没有必要每次都声明一个新的对象,就像上面所做的那样,你可以多次重复使用它。ScannerScannerScanner

一旦你从一个对象更改为另一个对象(在这个问题上是从保留双精度,现在wwe想要一个字符串),你必须清除缓冲区(那里就是那句话)。sc.nextLine();

而且,在这一切之后,请记住关闭扫描仪。这不是强制性的,但如果不是,您将收到“警告”或类似的东西。

评论

0赞 Anivartin Anand 7/9/2020
非常感谢!只是为了确保,System.out.println...应该在一行中,而不是那样断?
0赞 daenius 7/9/2020
@AnivartinAnand 不要担心System.out.println的样式,这就是格式化代码后的样子。如果您在 Eclipse 上工作,只需使用 Ctrl + Shift + F,代码将自动格式化。因为 System 内部的文本很长,所以 Eclipse 会像这样“剪切”System 句子。没什么好担心的!
0赞 Anivartin Anand 7/9/2020
好的,再次感谢!我尝试运行代码,但是当我尝试编译时,它显示了几个错误......那是因为我把它放在错误的地方吗?我没有更改任何内容,只是删除了 main 方法中的两个示例方法调用并将其替换为您的代码。我还在代码的开头添加了import java.util.Scanner(在指定类之前)。我做错了什么吗?
0赞 daenius 7/9/2020
真?多么奇怪,它不应该给你任何错误,确实它对我来说非常有效。我已经更改了我的代码,现在您可以看到所有应该在 .您提供的其余代码位于该部分之外。我不知道这是否是问题所在。main (String [] args)main
0赞 Anivartin Anand 7/10/2020
这些是我收到的错误: 线程“main”中的异常 java.lang.Error:未解决的编译问题:未定义 TempConversion 类型的 celsiusToFahrenheit(int) 方法 无法解析为类型 无法解析为类型 无法解析为类型 方法 celsiusToFahrenheit(Double) 未为 TempConversion 类型定义 fahrenheitToCelsius(Double) 方法未为 TempConversion 类型定义 fahrenheitToKelvin(Double) 方法未为 TempConversion 类型定义对于类型 TempConversion 未定义方法 kelvinToFahrenheit(Double)