Java—将if语句放入开关块

Java—将if语句放入开关块,java,if-statement,switch-statement,Java,If Statement,Switch Statement,我有一个任务,我必须使用开关。当输入整数-1时,程序应该终止。任何介于1和7之间的数字都将显示一周中的某一天。介于1到7和-1之间的任何其他数字将显示:“仅接受1到7之间的数字”。 当输入-1时,如何使程序终止。以下是迄今为止的代码: Scanner s = new Scanner(System.in); String res = ""; System.out.println("Input a number "); int day = s.nextInt();

我有一个任务,我必须使用开关。当输入整数-1时,程序应该终止。任何介于1和7之间的数字都将显示一周中的某一天。介于1到7和-1之间的任何其他数字将显示:“仅接受1到7之间的数字”。 当输入-1时,如何使程序终止。以下是迄今为止的代码:

    Scanner s = new Scanner(System.in);
    String res = "";
    System.out.println("Input a number ");
    int day = s.nextInt();

    if(day==-1){
System.exit(0);
}  
    switch (day) {
      case 1:
        res="Today is Sunday";
      break;
      case 2: 
        res="Today is Monday";
        break;
      case 3: 
        res = "Today is Tuesday";
        break;
      case 4: 
        res = "Today is Wednesday";
        break;
      case 5:
        res = "Today is Thursday";
        break;
      case 6: 
        res = "Today is Friday";
        break;
      case 7:
        res = "Today is Saturday";
        break;
      default:
        res = "Only numbers from 1 to 7 are accepted ";
        break;
    }
   System.out.println(res);

  }
}

使用我的解决方案更新了代码。

尝试此操作,检查一天是否大于1,然后将其发送到switch case

 if(day>=1){
    System.exit(0);
    }else{
switch(day%7){
case:
}
}

您的程序正在请求输入
1-7
,但当您切换
day%7
时,它将不适用于输入
7
,如果
day=7
,则
day%7=0
。您需要删除
第%7天
,只放置
天。那么完整的解决方案将是:

System.out.println("Input a number ");
int day = s.nextInt();

switch (day) {

  case -1:
     System.exit(0);
  break;
  case 1:
    res="Today is Sunday";
  break;
  case 2: 
    res="Today is Monday";
    break;
  case 3: 
    res = "Today is Tuesday";
    break;
  case 4: 
    res = "Today is Wednesday";
    break;
  case 5:
    res = "Today is Thursday";
    break;
  case 6: 
    res = "Today is Friday";
    break;
  case 7:
    res = "Today is Saturday";
  default:
    res = "Only numbers from 1 to 7 are accepted ";
    break;
  }
  System.out.println(res);
}

你为什么需要%呢?您已经显式地处理了每一个案例…让缺省值处理其他所有事情

Switch(day)
{
case 1:
..
default:
}

如果你给你的代码8,那么8%7==1,那么今天就是星期天

作为Sage的答案,您可以将案例1:System.exit(0);打破如果逻辑在方法中,则使用return语句(我认为使用return语句比使用System.exit()更优雅)


然而,您的逻辑永远不会达到“案例7”,因为您使用“day%7”,它将在除以7后返回余数,因此,如果day为正,它将在0到6之间;如果day为负,它将在-6到0之间。

使用do while可以帮助您获得所需的行为

            {
                Scanner s = new Scanner(System.in);
                String res = "";
                Integer day;
                do{
                System.out.println("Input a number ");
                day = s.nextInt();

                System.out.println(day);
                switch (day) {
                  case 1:
                    res="Today is Sunday";
                  break;
                  case 2: 
                    res="Today is Monday";
                    break;
                  case 3: 
                    res = "Today is Tuesday";
                    break;
                  case 4: 
                    res = "Today is Wednesday";
                    break;
                  case 5:
                    res = "Today is Thursday";
                    break;
                  case 6: 
                    res = "Today is Friday";
                    break;
                  case 7:
                    res = "Today is Saturday";
                  default:
                    res = "Only numbers from 1 to 7 are accepted ";
                    break;
                }
               System.out.println(res);
            }
            while (!day.equals(-1));
              }

当(true){}时,您可以将扫描仪初始化放在循环之外。由于某些原因,这不起作用,因此会发生什么情况,仍然显示默认语句。您可以删除%并直接传递值或计算外部开关并传递value@user2934299,我已经发表评论说你应该写这些案例。无论如何,用
复制粘贴更新了完整的答案
@ling.s,谢谢你通知我我自己愚蠢的误解:)事实上,第%7天不可能等同于第7天。在案例7中,你需要一个break语句。我不确定你的问题和标题“Java-将if语句放入开关块”之间是否有任何关系。这是真的,只是让我自己更加困惑。