【问题标题】:Can anybody make this code shorter using a loop?任何人都可以使用循环使这段代码更短吗?
【发布时间】:2013-05-04 17:28:14
【问题描述】:

只是一个简短的程序,可以计算出用户输入的天数中的哪一天。我从星期六的第 6 天开始。有没有办法可以使用循环来缩短代码?

import java.util.Scanner;

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

        int days[] = {1,2,3,4,5,6,7,8};
        String dayNames[] = {"Monday","Tuesday","Wednesday","Thursday","Friday",
                "Saturday", "Sunday"};
        int numdays;

        System.out.println("Enter how many days from now: ");
        numdays = input.nextInt();

        numdays = (6 + numdays) % 7;

        if(numdays == 0){
            System.out.println(dayNames[6]);
        }
        else if(numdays == 1 ){
            System.out.println(dayNames[0]);
        }
        else if(numdays == 2){
            System.out.println(dayNames[1]);
        }
        else if(numdays == 3){
            System.out.println(dayNames[2]);
        }
        else if(numdays == 4){
            System.out.println(dayNames[3]);
        }
        else if(numdays == 5){
            System.out.println(dayNames[4]);
        }
        else if(numdays == 6){
            System.out.println(dayNames[5]);
        }
    }
}

【问题讨论】:

  • 看看你的 if 语句。你能发现一个模式吗?
  • @NilsH 没错,在你的打印语句中做一些算术。
  • int days[] = {1,2,3,4,5,6,7,8}; 每周 8 天是什么时候开始的?我希望这意味着 3 天的周末.. 你可以在周日之后有额外的一天并称之为 Funday。 :)
  • 谢谢你们的帮助:)

标签: java loops weekday


【解决方案1】:

以下部分:

if(numdays == 0){
    System.out.println(dayNames[6]);
}
else if(numdays == 1 ){
    System.out.println(dayNames[0]);
}
else if(numdays == 2){
    System.out.println(dayNames[1]);
}
else if(numdays == 3){
    System.out.println(dayNames[2]);
}
else if(numdays == 4){
    System.out.println(dayNames[3]);
}
else if(numdays == 5){
    System.out.println(dayNames[4]);
}
else if(numdays == 6){
    System.out.println(dayNames[5]);
}

... 被替换为:

System.out.println(dayNames[(numdays + 6) % 7)]);

【讨论】:

    【解决方案2】:

    从星期日开始:

    String dayNames[] = {"Sunday", "Monday","Tuesday","Wednesday","Thursday","Friday",
                "Saturday"};
    

    将大的 if/else 替换为:

    System.out.println(dayNames[numdays]);
    

    【讨论】:

    • 这还有一个优点是数组从一周的第一天开始:)
    【解决方案3】:

    您可以使用switch 大小写代替多个 if 语句

    喜欢

    switch(numdays) {
      case 1:  ....  break;
      case 2: ..... break;
    .....
    }
    

    String dayNames[] = {"Sunday", "Monday","Tuesday","Wednesday","Thursday",
      "Friday","Saturday"};
    

    那么你可以直接指定索引

    System.out.println(dayNames[numdays]);
    

    【讨论】:

      【解决方案4】:
      for(numdays=0;numdays<=6;numdays++){
      System.out.println(dayNames[(numdays + 6) % 7)]);
      }
      

      【讨论】:

        【解决方案5】:

        不需要循环

        String dayNames[] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday",
                        "Sunday" };
        int i  = (5 + numdays) % 7;
        System.out.println(dayNames[i]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多