尝试从扫描程序对象收集输入时引发"No line found"的 Java 异常



我对Java相当陌生,我正试图构建一个"适合初学者的十大Java项目";项目,更具体地说,是一个温度转换器。我的代码抛出了以下错误:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at TempConvert.convertToFar(TempConvert.java:78)
at TempConvert.main(TempConvert.java:15)

我最初使用扫描器"*.nextDouble()"方法来获取双精度对象,但将其更改为"parseDouble"方法,因为我认为这可能是问题所在。唉,这并没有帮助。任何帮助解决这个问题将非常感激!

public static double convertToFar()
{
Scanner in = new Scanner(System.in);
String userEntry;
double formula, userDouble;
System.out.print("Enter degrees in Celsius: ");
userEntry = in.nextLine();
userDouble = Double.parseDouble(userEntry);
in.close();
formula = (userDouble - 32) * (5/9);
return formula;
}

我认为您编写的方法中的in.nextLine()最终与用户在关闭输入流之前输入的字符串发生了冲突。我创建了一个Scanner对象并将其发送给方法,以便它们能够使用相同的对象。只有当用户输入"E"后程序结束时,我才会关闭它。

import java.util.*;
public class TempConvert {
public static void main(String[] args)
{

double far, cel;
char userChoice;
Scanner in = new Scanner(System.in);  // I added this line
userChoice = displayMenu(in);
while (userChoice != 'E')
{
if (userChoice == 'F')
{
far = convertToFar(in);
System.out.println("Converted: " + far + "u00B0");
userChoice = displayMenu(in);
}
else if (userChoice == 'C')
{
cel = convertToCel(in);
System.out.println("Converted: " + cel + "u00B0");
userChoice = displayMenu(in);
}
else
{
System.out.println("Invalid Entry");
userChoice = displayMenu(in);
}
}
in.close();  // closing the input stream when the program ends


}
public static void displayTitle()
{
String title = "||---- TEMPERATURE CONVERTER ----||";
String one = "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-";
String two = "||       ** Auth: Arranic        ||";
String three = "||                               ||";
System.out.println(one + "n" + three + "n" + title + "n" + three     + "n" + two + "n" + three + "n" + one);
}
public static char displayMenu(Scanner input)
{
ClearScreen();
displayTitle();
System.out.println("n");
String choiceString;
char choice;

System.out.println("F - FARENHEIGHT      C - CELSIUS      E - EXIT");
System.out.print("CONVERT TO: ");
choiceString = input.nextLine();
// input.close()   --> removed this line
choice = Character.toUpperCase(choiceString.charAt(0));
return choice;
}
public static void ClearScreen()
{
System.out.print("33[H33[2J");
System.out.flush();
}
public static double convertToCel(Scanner in)
{
String userEntry;
double formula, userDouble;
System.out.print("Enter degrees in Fahrenheit: ");
userEntry = in.nextLine();
// in.close()   --> removed this line
userDouble = Double.parseDouble(userEntry);
formula = (userDouble - 32) * (5.0/9);
return formula;
}
public static double convertToFar(Scanner in)
{
String userEntry;
double userDouble, formula;
System.out.print("Enter degrees in Celsius: ");
userEntry = in.nextLine();
// in.close()   --> removed this line
userDouble = Double.parseDouble(userEntry);
formula = (userDouble * (9.0/5)) + 32;
return formula;
}
}
顺便说一句,你的计算不精确。你应该记住整数/整数=整数。也就是说,写5/9或9/5是不准确的,因为结果是一个整数类型的数字,而不是双精度类型的数字,我假设你想要得到。(5/9 = 0,9/5 = 1)因此,您应该在计算中添加5.0或9.0,以便Java能够理解您想要获得双类型结果(double/int = double)。还有一件事,你的计算错了(华氏温度到摄氏度给了我相反的结果,反之亦然),所以我把它们换了;)。

相关内容

最新更新