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

Java高中毕业判定程序无输出问题排查求助

你的Java毕业资格判断程序无输出的问题分析&修复方案

兄弟,我仔细扒了你的代码,问题其实挺集中的,咱们一个个说透:

核心问题汇总

1. 多个Scanner实例搞乱了输入流

你居然创建了8个Scanner对象都绑定System.in!这在Java里是绝对的大忌——多个Scanner会抢占同一个输入流,导致程序经常卡在等待输入的状态:你以为已经输入完所有内容了,但实际上某个Scanner还在蹲你输入下一个值,自然就走不到输出语句。

解决办法:只创建一个Scanner实例,所有输入都用它来读取,省心又不出错。

2. 变量作用域错误,判断条件里的变量根本不存在

你看你定义math1、english1这些变量的位置:

if (math >= 4) {
    boolean math1 = true; // 这个变量只在这个大括号里有效!
} else {
    boolean math1 = false; // 出了else块就没了!
}

到最后那个判断条件if(art1 && hope1 && gpa1 && hours1 && gpa1 && studies1 && science1 && english1 && math1 == true)的时候,这些math1、english1都是未定义的!编译器其实应该报错,但你可能没注意,就算勉强运行,程序也会因为找不到这些变量直接终止,根本到不了输出环节。

解决办法:把这些布尔变量提前在方法开头定义好,不要在if/else块里重新定义,只在块里赋值就行。

3. 逻辑嵌套完全颠倒,大部分路径走不到输出

你的if-else嵌套逻辑完全错了!比如只要math >=4,程序就会执行第一个if块里的代码,然后直接跳出这个if,后面的所有判断都不会执行,自然不会走到最后的输出语句。毕业资格应该是所有条件同时满足,而不是嵌套着层层判断。

解决办法:把嵌套的if改成平行的条件判断,每个条件单独检查,最后用逻辑与(&&)把所有条件组合起来。

4. 重复读取输入,导致程序卡住

你已经读取过一次HOPE的输入了:

char hope = physed3.next().charAt(0);

但后面又写了:

if (physed3.next().charAt(0) == (89)) physed = true;

这等于让用户再输入一次HOPE的Y/N,用户根本不知道要输入两次,程序就卡在这等输入,当然没输出。

解决办法:用之前已经读取的hope变量来判断,不要重复读取输入。


修正后的完整代码

package gradrequirment;
import java.util.Scanner;

public class graduation {
    public static void main(String[] args) {
        // 只创建一个Scanner实例,搞定所有输入
        Scanner scanner = new Scanner(System.in);
        
        // 提前定义所有需要的布尔变量
        boolean math1, english1, science1, studies1, hours1, gpa1, physed, art;

        System.out.println("Enter your GPA, service hours, and credits for each class.\n");
        
        System.out.println("Enter GPA:");
        double GPA = scanner.nextDouble();
        
        System.out.println("Enter Service Hours:");
        int hours = scanner.nextInt();
        
        System.out.println("Enter Y/N if you have taken HOPE.");
        char hope = scanner.next().toUpperCase().charAt(0); // 转大写,兼容小写输入
        
        System.out.println("Enter How Many Math Credits You Have:");
        int math = scanner.nextInt();
        
        System.out.println("Enter English Credits:");
        int english = scanner.nextInt();
        
        System.out.println("Enter Science Credits:");
        int science = scanner.nextInt();
        
        System.out.println("Enter Social Studies Credits:");
        int studies = scanner.nextInt();
        
        System.out.println("Enter Y/N if You Have A Fine Art Credit.");
        char arts = scanner.next().toUpperCase().charAt(0);

        // 用简洁的方式给布尔变量赋值,替代繁琐的if-else
        math1 = math >= 4;
        english1 = english >= 4;
        science1 = science >= 3;
        studies1 = studies >= 3;
        hours1 = hours >= 100;
        gpa1 = GPA >= 2.0;
        physed = hope == 'Y';
        art = arts == 'Y';

        // 所有条件同时满足才符合毕业资格
        if(math1 && english1 && science1 && studies1 && hours1 && gpa1 && physed && art) {
            System.out.println("You Have Graduated!");
        } else {
            System.out.println("You Have Not Graduated. Try Harder!");
        }
        
        scanner.close();
    }
}

额外优化点

  • 把输入的字符转成大写(toUpperCase()),用户输入小写y/n也能识别,更友好;
  • 简化布尔变量的赋值:比如math1 = math >=4;,比冗长的if-else简洁易读;
  • 去掉了多余的中间变量hope1、art1,直接用physed和art就行,减少冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:09