当前位置: 首页 > 知识库问答 >
问题:

返回开关:错误:开关表达式没有任何结果表达式

毛成济
2023-03-14

我不断地得到错误

error : switch expression does not have any result expressions

在终端上编译时。

error:missing return statement

在switch语句的末尾。这是在用终端编译的时候。



public class Lec2{
    public static void main(String[] args) {
        if (args.length != 3) {
            System.out.println("usage: [year] [month] [day]");
            System.exit(1);
        }

        int y = Integer.parseInt(args[0]);
        int m = Integer.parseInt(args[1]);
        int d = Integer.parseInt(args[2]);

        Day day = new Day(y, m, d);
        String week = day.dayOfWeek();
        System.out.println(y + "/" + m + "/" + d + " is " + week);
    }
}

class Day {
    private static final int MIN_YEAR = 1583;
    //private variables
    private int year;
    private int month;
    private int date;

    //TODO: implement setters and getters

    public int getYear() {
        return year;
    }
    public int getMonth() {
        return month;
    }
    public int getDay() {
        return date;
    }
    
    public void setYear(int year) {
        if(year < 1583) {
            System.err.println("year should be >= 1583");
            System.exit(1);
        }
    }
    public void setMonth(int month) {
        
    }
    public void setDate(int date) {
        
    }
    
    
    //constructor
    public Day(int year, int month, int date){
        this.setYear(year);
        this.setMonth(month);
        this.setDate(date);
    }

    public String dayOfWeek(){
       
        if(month ==1) {
            month = 13;
            year--;
        }
        if(month ==2) {
            month = 14;
            year--;
        }
        
        
        int y = this.getYear();
        int m = this.getMonth();
        int d = this.getDay();

        //TODO: implement Zeller's congruence
        int h = d + 13*(m + 8) / 5 + y / 400 - y / 100 + y / 4 + y;
        h = h % 7;

        switch (h){
           //TODO: implement conversion from h to week string
           case 0: return("Sunday");
           case 1: return("Monday");
           case 2: return("Tuesday");
           case 3: return("Wednesday");
           case 4: return("Thursday");
           case 5: return("Friday");
           case 6: return("Saturday");
        }
        
    }
}

共有1个答案

公良理
2023-03-14

开关不返回任何东西,它与它内部发生的任何事情有关。

switch (h){
        //TODO: implement conversion from h to week string
        case 0: return("Sunday");
        case 1: return("Monday");
        case 2: return("Tuesday");
        case 3: return("Wednesday");
        case 4: return("Thursday");
        case 5: return("Friday");
        case 6: return("Saturday");
}
 类似资料:
  • 当交换机分支调用void返回类型的方法时,有没有办法强制对所有枚举值进行彻底检查?仅仅为了诱使编译器要求穷尽性而对产量进行硬编码是非常丑陋的。 这是我当前的模式(handle方法具有void返回类型) 我想使用表达式的原因是在添加新枚举值但未处理时出现编译错误。

  • 我不明白第77行不能从这个开始,但我用“public String showTrack()”开始了类似的内容。 这是我当前的代码:

  • 我正在从其他框架生成一个JTabbedFrame。

  • 问题内容: 我基本上是在完善,完成并尝试从Java初学者的参考书中编译测试代码。目的是创建一个猜谜游戏,其中目标位于3个连续的单元格中(我将位置保持在数组中),而用户则猜测该单元格的编号。逐个摧毁目标细胞。 我在这里检查了六则关于同一错误的帖子,但我无法弄清楚出了什么问题。 这是我的错误: 我的代码是: 问题答案: 方法只能声明局部变量。这就是为什么当您尝试将其声明为public时,编译器会报告错

  • 我基本上是在精炼、完成并尝试从java初学者参考书中编译测试代码。目标是创建一个猜测游戏,其中目标位于3个连续的单元中(我在阵列中保留位置),用户猜测单元号以逐个单元摧毁目标单元。 我在这里查看了六篇关于同一个错误的帖子,但我不知道出了什么问题。 这是我的错误: 我的代码是:

  • 将异常获取为 :lambda表达式中的返回类型错误: