关于Java中的switch语句

时间:2017-12-07 15:57:57

标签: java

我还在学习。今天我在SoloLearn中遇到了一个问题,转到了声明病变:

int day = 3;

switch(day) {
  case 1:
    System.out.println("Monday");
    break;
  case 2:
    System.out.println("Tuesday");
    break;
  case 3:
    System.out.println("Wednesday");
    break;

// Outputs "Wednesday"

我认为,我可以有一个例子来记住输入和切换语句:我想输入一个数字,1作为星期一,2作为星期二....到7作为星期日,并重复:8作为星期一, 9周二...... 这是我的代码:

import java.util.Scanner;

public class Program {
public static void main(String[] args) {
    Scanner day = new Scanner(System.in);


        if (day.nextInt()>7){
            day.nextInt()=day.nextInt()%7;
        }

    switch(day.nextInt()){
        case 1 :
            System.out.println("Monday");
            break;
        case 2:
            System.out.println("Tuesday");
            break;
        case 3:
            System.out.println("Wednesday");
            break;
        case 4:
            System.out.println("Thursday");
            break;
        case 5:
            System.out.println("Friday");
            break;
        case 6: 
            System.out.println("Saturday");
            break;
        case 0: 
            System.out.println("Sunday");
        case 7:
            System.out.println("Sunday");
            break;

        }
    }
}

和错误。我的知识还不足以解决这个问题(我想是这样,因为我是一个新手而且还在学习)。你可以为我扩展,解决这个问题,并感谢教! 玩得开心!

8 个答案:

答案 0 :(得分:5)

问题在于:

    if (day.nextInt()>7){
        day.nextInt()=day.nextInt()%7;
    }

您正在尝试将值重新分配给方法调用day.nextInt(),这是您无法做到的。相反,尝试以下内容:

int dayNum = day.nextInt() % 7;

另外,您的switch包含dayNum == 7的案例,情况绝非如此。

答案 1 :(得分:2)

正如@kolosy所提到的,你错过了case 0下方的中断语句,并且写了day.nextInt()四次,实际上是要求用户输入四次。 你也不能day.nextInt()=day.nextInt()%7;这样做。通过这样做,您尝试将值重新分配给方法调用将main函数的代码更改为此

        Scanner day = new Scanner(System.in);
        int enteredDay = day.nextInt();

        if (enteredDay > 7) {
            enteredDay = enteredDay % 7;
        }

        switch (enteredDay) {
        case 1:
            System.out.println("Monday");
            break;
        case 2:
            System.out.println("Tuesday");
            break;
        case 3:
            System.out.println("Wednesday");
            break;
        case 4:
            System.out.println("Thursday");
            break;
        case 5:
            System.out.println("Friday");
            break;
        case 6:
            System.out.println("Saturday");
            break;
        case 0:
            System.out.println("Sunday");
            break;
        case 7:
            System.out.println("Sunday");
            break;

        }

答案 2 :(得分:0)

您错过case 0下方的中断语句。 Java不允许像其他语言一样使用标签。

另外 - 你应该检查你的号码是> = 7,而不是> 7,或者你永远不会在第二周得到0。 8%7是1

答案 3 :(得分:0)

在案例0之后添加中断:

            case 6: 
                System.out.println("Saturday");
                break;
            case 0: 
                System.out.println("Sunday");
              break;

如果switch()中的值超过7,则会出现错误,因为此处未提供任何default case。您可以执行number%7之类的操作,以便始终在值范围内获取值。

答案 4 :(得分:0)

NextInt()是一种方法..你不能为它赋值

答案 5 :(得分:0)

这里的关键问题是模运算符'%'将产生最多为但不包括值的数字。

e.g。

 1 %7 = 1
 7 %7 = 0

您可能会发现使用数字0到6更容易引用工作日而不是1到7,否则您必须减去1以通过模运算符运行它,之后再运行1。

答案 6 :(得分:0)

您需要使用nextInt()一次来获取输入并将其存储在变量中。每次调用nextInt()时,它都会查找输入的下一个整数值。

Scanner day = new Scanner(System.in);

int dayInput = day.nextInt();
    if (dayInput>7){
        dayInput=dayInput%7;
    }

switch(dayInput){
    case 1 :
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    case 6: 
        System.out.println("Saturday");
        break;
    case 0: 
        System.out.println("Sunday");
    case 7:
        System.out.println("Sunday");
        break;

}

答案 7 :(得分:0)

您可以通过创建int值来将day的输入设置为day.nextInt()来解决此问题,然后您可以在创建的变量中进行数学运算并根据该值进行切换,这应该有效:

   Scanner day = new Scanner(System.in);
    int dayVal = day.nextInt();

    if (dayVal>7){
        dayVal %= 7;
    }

    switch(dayVal){
        case 1 :
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    case 6:
        System.out.println("Saturday");
        break;
    case 0:
        System.out.println("Sunday");
        break;
    }
}

如前所述,你需要将7改为0因为你永远不会有0的残余,所以你永远不会得到星期天