我试图创建一个新的 scanner 后,我关闭了前者的主要.但它会带来错误. 我以为我在方法中创建了一个新的扫描器,但我关闭了它,这样它就可以通过我的方法读取新的输入,但它没有.这里的问题是什么?闲聊照亮不了我:(

package gross_calculator;

import java.util.Scanner;

public class GrossPayCalculator {
    
    static void story() {
        
        System.out.println("Which season the day is of?");
        Scanner scanner1 = new Scanner(System.in);
        String season = scanner1.nextLine();
        System.out.println("How is that day?");
        String adjective = scanner1.nextLine();
        System.out.println("What is the number?");
        int number = scanner1.nextInt();
        System.out.println("On a "+adjective+" "+season+" day,\nyou read "+number+" pages of book.");
        scanner1.close();
    }
    
    public static void main(String[] args) {
        
        int hours = 0;
        System.out.println("How many hours did you work?: ");
        Scanner scanner = new Scanner(System.in);
        hours = scanner.nextInt();
        
        double payRate = 0;
        System.out.println("What is your pay rate?: ");
        payRate = scanner.nextDouble();
        
        scanner.close();
        
        double grossPay = hours*payRate;
        System.out.println("Gross pay: "+grossPay);
        
        story();
    }

}

错误消息:

How many hours did you work?: 
23
What is your pay rate?: 
12,2
Gross pay: 280.59999999999997
Which season the day is of?
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
    at java_essentials/gross_calculator.GrossPayCalculator.story(GrossPayCalculator.java:11)
    at java_essentials/gross_calculator.GrossPayCalculator.main(GrossPayCalculator.java:36)

推荐答案

使用单个Scanner对象,不要关闭它,因为您正在从System.in读取

See the comments on this answer for further clarification.

package gross_calculator;

import java.util.Scanner;

public class GrossPayCalculator {

    private static void printStory(Scanner scanner) {
        System.out.println("Which season is it?");
        String season = scanner.nextLine();
        System.out.println("How is the day?");
        String adjective = scanner.nextLine();
        System.out.println("Enter a number:");
        int number = Integer.parseInt(scanner.nextLine());
        System.out.println("On a " + adjective + " " + season + " day, you read " + number + " pages of a book.");
    }

    private static double calculateGrossPay(Scanner scanner) {
        System.out.println("How many hours did you work?: ");
        int hours = Integer.parseInt(scanner.nextLine());
        System.out.println("What is your hourly pay rate?: ");
        double payRate = Double.parseDouble(scanner.nextLine());
        return hours * payRate;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double grossPay = calculateGrossPay(scanner);
        System.out.println("Gross pay: " + grossPay);
        printStory(scanner);
    }
}

Example Usage:

How many hours did you work?: 
8
What is your hourly pay rate?: 
100
Gross pay: 800.0
Which season is it?
Spring
How is the day?
Sunny
Enter a number:
42
On a Sunny Spring day, you read 42 pages of a book.

Java相关问答推荐

无法运行Java(已解决)

如何使用CSS为选定但未聚焦的表格行设置背景 colored颜色 ?

Select 按位运算序列

屏蔽字母数字代码的Java正则表达式

需要一个找不到的jakarta.sistence.EntityManager类型的Bean

从Spring5迁移到Spring6:无法在雅加达包中找到类

Bean定义不是从Spring ApplationConext.xml文件加载的

Instancio未在日志(log)中显示测试失败消息

无法播放音频:从资源加载库GStreamer-Lite失败

有谁能帮我修一下这个吗?使输出变得更加整洁

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

无法将GSON导入到我的JavaFX Maven项目

如果List是一个抽象接口,那么Collectors.toList()如何处理流呢?

Quarkus:运行时出现EnumConstantNotPresentException

如果执行@BeForeEach#repository.save(),则测试中的UnitTest最终UUID会发生更改

Java嵌套流查找任意值

Java System.getProperty在哪里检索user.home?

如何使用我的RLE程序解决此问题

在数组列表中找到对象后,未从数组中删除对象

有没有办法仅将 JComboBox 中的选定项目居中(因此保持组合框中的所有项目左对齐)