我还在学习。今天我在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;
}
}
}
和错误。我的知识还不足以解决这个问题(我想是这样,因为我是一个新手而且还在学习)。你可以为我扩展,解决这个问题,并感谢教! 玩得开心!
答案 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的残余,所以你永远不会得到星期天