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; } } } }
差异原因:
使用
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。
- 输入薪资6后,
使用
else的执行流程:- 当
sum变为1时,前面所有的else if条件都不满足,此时else分支会兜底执行:计算1/1=1,输出R1 : 1,随后sum %=1,sum变为0,循环条件不满足,程序正常结束。
- 当
简单来说,else if需要满足特定条件才会执行,而else是当前面所有条件都不成立时的默认分支,能覆盖所有剩余情况(比如这里的sum=1)。
内容的提问来源于stack exchange,提问作者Akila Umayanga
相关产品推荐
相关产品推荐

