You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java程序无法获取eask输入,直接触发无效选项提示问题

问题分析与解决方案

我来帮你搞定这个程序的问题,主要有两个关键原因导致了你的输入异常和判断错误:

1. Scanner输入缓冲区的换行符残留问题

你用sc.nextInt()读取价格后,这个方法只会读取输入的整数部分,而用户按下回车键产生的换行符会留在输入缓冲区里。接下来调用sc.nextLine()的时候,它会直接读取这个空的换行符,导致eask变成了空字符串,自然不匹配"Yes"或"No",直接触发了"Invalid option"的分支。

解决办法很简单:在sc.nextInt()之后,额外调用一次sc.nextLine()来清空缓冲区里的换行符。

2. 字符串比较用错了运算符

Java里字符串不能用==来比较内容,==比较的是两个字符串对象的内存地址,而不是实际的文本内容。你现在写的eask == "Yes"、Product == "Mobile"这类判断,大概率会返回false,即使输入的内容是对的。

正确的做法是用equals()方法(区分大小写)或者equalsIgnoreCase()(不区分大小写,对用户输入更友好)来比较字符串内容。


修正后的完整代码

import java.util.*;
class Main {
    public static void main(String[] args) {
        int discount = 0, ediscount = 1;
        Scanner sc = new Scanner(System.in);
        
        // 读取产品名称
        String product = sc.nextLine();
        // 读取价格,之后清空换行符
        int price = sc.nextInt();
        sc.nextLine(); // 关键:吃掉nextInt()遗留的换行符
        // 现在可以正确读取用户输入的Yes/No了
        String eask = sc.nextLine();

        if (price > 100) {
            // 用equals比较字符串内容,也可以用equalsIgnoreCase兼容大小写输入
            if (eask.equals("Yes") || eask.equals("No")) {
                if (product.equals("Mobile")) {
                    discount = 10;
                    if (eask.equals("Yes")) ediscount = 12;
                } else if (product.equals("Laptop")) {
                    discount = 20;
                    if (eask.equals("Yes")) ediscount = 10;
                } else if (product.equals("gadgets")) {
                    discount = 0;
                    if (eask.equals("Yes")) ediscount = 0;
                } else {
                    System.out.println("Invalid product");
                }
            } else {
                System.out.println("Invalid option");
            }
        } else {
            System.out.println("Invalid price");
        }
        // 这里提醒下:原代码的TBA计算是discount*Price,可能逻辑有误,应该是折扣后价格的话,应该是price * (discount / 100.0f)
        float TBA = discount * price;
        System.out.println(TBA);
    }
}

另外提个小细节:变量名按照Java规范应该用小驼峰,比如product而不是Product,这样代码的可读性会更好~

内容的提问来源于stack exchange,提问作者Aminator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:08:26