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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:24:02