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

Java代码中混用三元运算符、if/else及switch可行吗?程序中断求助

解决Scanner混合nextInt()和nextLine()导致程序中途停止的问题

你的程序中途停止的核心原因是**Scanner.nextInt()只读取整数内容,不会处理输入后的换行符**:
当你输入选项数字(比如1)并按下回车时,nextInt()只取走了数字,回车产生的换行符还留在输入缓冲区里。后续执行type.nextLine()时,它会直接读取这个空的换行符,导致switch语句匹配不到任何case,直接走default分支输出"Thank you!",看起来就像程序中途停止了。

修复方案

最简单的修复方式是在nextInt()之后,额外调用一次type.nextLine()来消耗掉残留的换行符:

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 */

package com.operators;

import java.util.Scanner;

/**
 *
 * @author Casner
 */
public class Operators {

    public static void main(String[] args) {
        
        Scanner type = new Scanner(System.in);
        System.out.print("Welcome to Chip and Burger Joint, would you like to order? please type Yes or No: ");
        String st = type.nextLine();
        String b = "You are now leaving Chip and Burger Joint";
        String c = "Start your order: " ;
        String ord = "Yes".equals(st)? c:b;
        System.out.println(ord);
                
        if(ord.equals(c)){
            
            System.out.print("You have 3 options: 1. Chips only, 2. Burger only, 3. Meal, Please Choose: ");
            int ord1 = type.nextInt();
            // 新增:消耗掉nextInt()残留的换行符
            type.nextLine();
             
            if(ord1 == 1){
                System.out.print("Please enter MM for mini, S for small, M for medium and L for large: ");
                String chips = type.nextLine();
                
                switch(chips){
                    case "MM": System.out.println("You picked mini chips");
                    break;
                    case "S": System.out.println("You picked small chips");
                    break;
                    case "M": System.out.println("You picked medium chips");
                    break;
                    case "L": System.out.println("You picked large chips");
                    break;
                    default: System.out.println("Thank you!");
                }
            }
            
            else if(ord1 == 2){
                System.out.print("Please enter C for Chicken burger or B for Beef burger: ");
                String burger = type.nextLine();
                switch(burger){
                    case "C": System.out.println("You picked Chicken burger");
                    break;
                    case "B": System.out.println("You picked Beef burger");
                    break; // 修复漏写的break,避免匹配后执行default
                    default: System.out.println("Thank you!");
                }
            }
            
            else if(ord1 == 3){
                System.out.println("Please enter CM for chicken burger meal or BM for beef burger meal");
                String bm = type.nextLine();
                
                switch(bm){
                    case "CM": System.out.println("You picked Chicken burger meal");
                    break;
                    case "BM": System.out.println("You picked Beef burger meal");
                    break;
                    default: System.out.println("Thank you!");
                }
            }
            else System.out.println("Thank You!");
        }
        
        //System.out.println("Thank you!");
    }
}

另外还顺便修复了一个小问题:第二个switch的case "B"后面原本漏写了break,会导致匹配到B时,先输出牛肉汉堡,再执行default输出"Thank you!",现在已经补上。

另一种更稳健的方案(可选)

如果想彻底避免这类缓冲区问题,可以统一用nextLine()读取所有输入,再把需要整数的部分手动转换:

// 替换原来的nextInt()部分
System.out.print("You have 3 options: 1. Chips only, 2. Burger only, 3. Meal, Please Choose: ");
String ordStr = type.nextLine();
int ord1 = Integer.parseInt(ordStr);

这种方式可以更好地处理用户输入非整数的情况(比如输入字母),不过需要额外添加异常处理来防止转换失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:27