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

Java代码中使用else与else if导致输出异常的原因咨询

分支条件使用else与else if的差异原因解释

我写了一段Java代码,当最后一个分支用else if(sum > 1)而非else时,程序输出异常:输入员工数1、薪资6,程序仅显示“R5 : 1”,未输出“R1 : 1”;但把最后一个条件改成else后,输出结果正确。以下是代码:

import java.util.*;
class Example{
    public static void main(String args[]){
        Scanner input =new Scanner(System.in);
        System.out.print("Input number of employees : ");
        int num = input.nextInt();
        int sum = 0;
        for (int i = 1;i<=num;i++){
                System.out.print("Input Salary : "+i+" : ");
                int sal = input.nextInt();
                sum += sal; 
        }
        System.out.println("Total Salary ; "+sum);
        System.out.println("====================");
        while(sum!=0){
            if(sum > 5000){
                    int r5000 = sum/5000;
                    System.out.println("R5000 : "+r5000);
                    sum %= 5000; 
                }else if(sum > 2000){
                    int r2000 = sum/2000;
                    System.out.println("R2000 : "+r2000);
                    sum %= 2000; 
                }else if(sum > 1000){   
                    int r1000 = sum/1000;
                    System.out.println("R1000 : "+r1000);
                    sum %= 1000; 
                    }
                else if(sum > 500){ 
                    int r500 = sum/500;
                    System.out.println("R500 : "+r500);
                    sum %= 500; 
                }else if(sum > 200){    
                    int r200 = sum/200;
                    System.out.println("R200 : "+r200);
                    sum %= 200; 
                }else if(sum > 100){    
                    int r100 = sum/100;
                    System.out.println("R100 : "+r100);
                    sum %= 100; 
                }else if(sum > 50){ 
                    int r50 = sum/50;
                    System.out.println("R50 : "+50);
                    sum %= 50; 
                }else if(sum > 10){ 
                    int r10 = sum/10;
                    System.out.println("R10 : "+r10);
                    sum %= 10; 
                }else if(sum > 5){  
                    int r5 = sum/5;
                    System.out.println("R5 : "+r5);
                    sum %= 5; 
                }else if(sum > 2){  
                    int r2 = sum/2;
                    System.out.println("R2 : "+r2);
                    sum %= 2; 
                } else if(sum > 1){ //2nd time I used else instead of else if
                    int r1 = sum/1;
                    System.out.println("R1 : "+r1);
                    sum %= 1; 
                    }
                }
    }
}

差异原因:

  1. 使用else if(sum > 1)的执行流程:

    • 输入薪资6后,sum初始值为6。进入while循环,满足sum > 5的条件,执行R5分支:计算6/5=1,输出R5 : 1,随后sum %=5,sum变为1。
    • 循环继续执行,此时sum=1,所有else if的条件(从sum>5000到sum>1)都不成立——因为sum>1的判断结果是false,没有任何分支会处理sum=1的情况。
    • 这导致sum始终等于1,while(sum!=0)的循环条件永远成立,程序陷入死循环,自然不会输出R1 : 1。
  2. 使用else的执行流程:

    • 当sum变为1时,前面所有的else if条件都不满足,此时else分支会兜底执行:计算1/1=1,输出R1 : 1,随后sum %=1,sum变为0,循环条件不满足,程序正常结束。

简单来说,else if需要满足特定条件才会执行,而else是当前面所有条件都不成立时的默认分支,能覆盖所有剩余情况(比如这里的sum=1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:07:19