Java邮费计算器switch分支中println无法打印全部值问题排查
代码问题排查与修复方案
核心问题梳理
case 1、case 2的else分支未加花括号,导致逻辑完全错误
Java语法规定,不加花括号的if/else仅能关联紧随其后的第一条语句。你现有代码中else后的第二行赋值语句不属于else分支,无论前面的重量条件是否匹配,都会强制执行,直接覆盖之前的正确赋值,最终输出的结果和预期完全不符。case 3分支逻辑结构混乱,正常场景无输出
你当前将价格打印语句仅放在了最后一个else代码块中,当包裹符合重量≤2000g、尺寸≤90的正常寄件条件时,仅完成了价格赋值,不会执行任何打印逻辑,直接跳出分支,这就是你遇到的无输出问题的核心原因。同时该分支多余嵌套了一层花括号,还存在变量未初始化的编译风险。- 局部变量未初始化,会触发编译报错
Java要求所有局部变量必须在使用前完成赋值,你现有写法中部分分支下编译器无法确认变量是否已经赋值,会直接编译失败无法运行。
修正后完整代码
package inlämningsuppgift_2_porto_alysia_nonor; import java.util.Scanner; public class Inlämningsuppgift_2_porto_Alysia_Nonor { public static void main(String[] args) { Scanner input = new Scanner(System.in); // Ledtext, presentation av menyval System.out.println("Beräkna ditt porto"); System.out.println(" "); //user input, meny med val System.out.println("Önskar du skicka"); System.out.println("1. Brev"); System.out.println("2. Rekommenderat brev"); System.out.println("3. Brev skicka lätt"); System.out.print("Ange ditt val: "); int brevVal = input.nextInt(); //beräkning av porto switch (brevVal){ case 1: System.out.print("Ange vikten i gram: "); double brevEttgram = input.nextDouble(); double porto = 0; int frimärken = 0; if (brevEttgram <= 50){ porto = 11; frimärken = 1; } else if (brevEttgram <= 100){ porto = 22; frimärken = 2; } else if (brevEttgram <= 250){ porto = 44; frimärken = 4; } else if (brevEttgram <= 500){ porto = 66; frimärken = 6; } else if (brevEttgram <= 1000){ porto = 88; frimärken = 8; } // 给else分支加花括号包裹全部赋值逻辑 else { porto = 110; frimärken = 10; } System.out.print("Ditt brev behöver " +frimärken+ " frimärken och det kommer kosta " +porto+ " kr"); break; case 2: System.out.print("Ange vikten i gram: "); double rekBrevgram = input.nextDouble(); double prisFörfrimärkt = 0; double prisSkickadirekt = 0; if (rekBrevgram <= 50){ prisFörfrimärkt = 92; prisSkickadirekt = 72; } else if (rekBrevgram <= 100){ prisFörfrimärkt = 103; prisSkickadirekt = 83; } else if (rekBrevgram <= 250){ prisFörfrimärkt = 125; prisSkickadirekt = 105; } else if (rekBrevgram <= 500){ prisFörfrimärkt = 147; prisSkickadirekt = 127; } else if (rekBrevgram <= 1000){ prisFörfrimärkt = 169; prisSkickadirekt = 149; } // 给else分支加花括号包裹全部赋值逻辑 else { prisFörfrimärkt = 191; prisSkickadirekt = 171; } System.out.print("Du kan antingen skicka ditt brev med Pris för frimärkt, vilket kommer kosta " +prisFörfrimärkt+ " kr eller Skicka Direkt vilket kommer kosta " +prisSkickadirekt+ " kr"); break; case 3: System.out.print("Ange vikten i gram: "); double skickaLättgram = input.nextDouble(); System.out.print("Ange maxmåttet: "); double skickaLättmått = input.nextDouble(); double prisSkickalätt = 0; if (skickaLättgram >= 2000 || skickaLättmått >= 90){ System.out.print("Ditt paket är för stort eller tungt för att skickas som Brev Skicka lätt. Välj ett annat alternativ."); } else { if (skickaLättgram <= 2000 && skickaLättmått <= 90){ prisSkickalätt = 95; } else { prisSkickalätt = 62; } // 所有正常寄件场景统一打印输出 System.out.print("Ditt paket går att skicka som ett Brev Skicka lätt. Portot kommer kosta " +prisSkickalätt+ " kr"); } break; // 新增非法输入兜底分支 default: System.out.print("Ogiltigt val, vänligen försök igen."); } input.close(); } }
内容的提问来源于stack exchange,提问作者Alysia Nonor
相关产品推荐
相关产品推荐

