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

Java Stack实现水果篮程序时输入数量大于2无法连续输入的问题求助

问题分析与解决方案

嘿,我看到你遇到的问题了,咱们一步步拆解解决:

核心问题:循环条件逻辑错误

你的do-while循环条件写反啦!当前的条件是while(x == size),这意味着只有当x等于你输入的size值时,循环才会继续执行——但初始x是1,第一次循环后x就变成2了,这时候如果size大于2,x肯定不等于size,循环直接终止,自然只能输入一次水果。

正确的逻辑应该是:只要x还没超过设定的水果数量,就继续循环。所以循环条件应该改成while(x <= size)(或者while(x < size + 1),效果完全一致)。

额外优化建议

还有个小细节:你的switch只处理小写的a/o/m/g,如果用户输入大写字母(比如A)或者带空格的输入,就不会被识别,水果也不会加入栈里。可以把输入的字符串转成小写,同时去掉首尾空格,让程序更健壮。另外还可以加个default分支处理无效输入,避免用户输错后直接跳过次数。

修正后的完整代码

import java.util.Scanner;
import java.util.Stack;

public class FruitBasket {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Stack<String> fruits = new Stack<String>();
        System.out.println("Catch and Eat any of these Fruits: ('Apple' , 'Orange' , 'Mango' , 'Guava' ) ");
        System.out.print("How many fruit would you like to catch?");
        int size = scan.nextInt();
        System.out.println("Choose a fruit to catch. Press A , O , M or G.");
        scan.nextLine(); // 吃掉nextInt()留下的换行符,避免读取空字符串
        int x = 1;
        do {
            // 转小写+去空格,兼容更多输入情况
            String input = scan.nextLine().toLowerCase().trim();
            System.out.println("Fruit " + x + " of " + size + ": " + input);
            switch(input) {
                case "a":
                    fruits.add("Apple");
                    break;
                case "o":
                    fruits.add("Orange");
                    break;
                case "m":
                    fruits.add("Mango");
                    break;
                case "g":
                    fruits.add("Guava");
                    break;
                default:
                    // 处理无效输入,提示用户重新输入,同时回退x避免跳过次数
                    System.out.println("Invalid input! Please enter A, O, M, or G.");
                    x--;
                    break;
            }
            x++;
        } while(x <= size); // 修正循环条件:只要x还没超过设定数量就继续

        System.out.println("Your basket now has: " + fruits);
        System.out.println(); // 空行分隔结果
    }
}

原循环失效的原因再梳理

举个例子,假设你输入size=3:

  • 初始x=1,第一次执行do块后x变成2
  • 进入while判断:2 == 3?不成立,循环直接结束
  • 结果只执行了1次,根本没机会输入剩下的2个水果

改成x <= size后,逻辑就通顺了:

  • x=1执行后变2,2<=3 → 继续循环
  • x=2执行后变3,3<=3 → 继续循环
  • x=3执行后变4,4<=3 → 停止循环,刚好执行了3次,完美匹配你输入的水果数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:08:12