当前位置: 首页 > 知识库问答 >
问题:

Java在尝试从Scanner对象收集输入时引发“找不到行”异常

太叔志尚
2023-03-14

我对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)

我最初使用scanner“*.nextDouble()”方法获取double,但将其更改为“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;
    }

共有1个答案

南门新知
2023-03-14

我认为,<代码>在。您编写的方法中的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("\033[H\033[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就会明白你想得到双类型的结果(双/int=双)。还有一件事,你的计算放错了地方(华氏度到摄氏度给了我相反的结果,反之亦然),所以我把它们换了起来;)。

 类似资料:
  • 当用户在扫描器中输入任何整数时,我试图捕捉一个异常。我理解使用字符串item=scan。nextLine()将允许进行任何输入,包括整数。我创建了一个自定义异常来捕捉数字1。但是如果用户输入999或任何其他整数会发生什么呢。我如何捕获这些其他整数作为异常的一部分? import java.util.Scanner;import java.lang.Exception; 公共类示例一{ } 公共类T

  • 问题内容: 我上课要打针 但是没有实现IMyInterface的类。如何使spring注入无效而不是抛出,因为我不一定需要存在它? 问题答案: 使用(假设是),我认为没有直接的方法可以使绑定成为可选。但是,如果使用,则可以将其属性设置为:

  • 问题内容: 为什么list.index会引发异常,而不是使用任意值(例如)?这背后的想法是什么? 对我来说,处理特殊值而不是例外看起来更干净。 编辑 :我没有意识到这是一个潜在的有效值。然而,为什么不别的呢?无值如何? 问题答案: 因为本身就是有效的索引。它可以使用一个不同的值,例如,但在其他情况下(因此)可能没有用,并且仅相当于错误检查,这正是异常处理的目的。

  • 下面是我生成PDF的代码: 下面是我用来绘制多个字符串的代码: 此代码正常工作,但如果我将更改为,它将引发以下异常: 起初,我认为这是因为有些数据不存在,无法编写,但如果我不更新Voly,它就可以正常工作。然后我认为这是一个问题,当创建了一个新页面但流存在时,没有创建PDPageContentStream。 提前感谢您的帮助!

  • 想象一下下面的scanario:我有一个程序,它要求输入一个整数,然后是一个String输入。 根据aobe代码,我没有机会输入姓名。因此,通常我会声明2个扫描仪对象,如下所示: 我的问题是:有必要声明多个扫描仪对象来接受不同类型的输入吗??我这样做是正确的吗? 我已经考虑这个问题很多年了。(SO中的几个问题提到了多扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。)

  • 有人能给我解释一下原因吗?