1到30之间的数字不可分辨3

时间:2015-05-02 06:29:53

标签: java math

所以我几天前就开始学习Java了,除了这个令我难以置信的练习外,我做得很好。因此,练习是编写一个程序,显示1到30之间不可分割的所有数字3"。所以这很容易:

class numbers {
    public static void main (String args[]) {
        for (int i = 0; i <=30; i++){
            switch(i % 3){
                case 0 :
                    break;
                default :
                    System.out.println(i);
                    break;
            }
        }
    }
}

除了其中一个变体说&#34;在检测到可分性后使用break。现在我不确定上面代码中使用的break是否正确,因为它是switch的一部分。我想知道是否还有其他方法可以做到。

3 个答案:

答案 0 :(得分:5)

一些修正:

  1. 类名应以大写字母开头,名称类Numbers,而不是numbers
  2. 从1开始迭代,而不是从0开始,因为你在[1..30]范围内显示数字。
  3. 因为这里只有2种可能性(是或不是不可分割的),所以用if语句替换switch。开关更适合各种条件。
  4. 最重要的。使用break会让你离开循环。使用continue将跳过此循环并转到下一次迭代。
  5. 所以现在你的代码看起来应该简洁明了:)

    class Numbers {
        public static void main (String args[]) {
            for (int i = 1; i <=30; i++){
                if(i % 3 == 0){
                 continue;
                }
                 System.out.println(i);
                }
            }
        }
    }
    

    或者你可以使用更短的版本:

    for (int i = 1; i <=30; i++){
        if(i % 3 != 0){
           System.out.println(i);
        }
    }
    

答案 1 :(得分:1)

另一个简短的解决方案。

我们知道从1到30只有10个可被3整除的数字,我们制作了10个循环来打印它们。

for (int i = 1; i <= 30; ++i) {
    System.out.printf("%d%n%d%n", i++, i++);
}

我们的想法是在可被3整除的数字之前打印两个数字,并跳过可被整除的数字。

  • 计数器i从1
  • 开始
  • %d中的第一个System.out.printf打印当前i(i = 1)并将其增加1(i = 2)
  • %d中的第二个System.out.printf打印当前i(i = 2)并将其增加1(i = 3)
  • for-loop增加i的结束条件为1(i = 4)
  • 重复直至结束条件i <= 30为假

编辑更易读的版本(由ajb提议)

for (int i = 1; i <= 30; i += 3) {
    System.out.printf("%d%n%d%n", i, i + 1);
}

答案 2 :(得分:0)

代码没问题 - 如果i % 3结果为0,则不打印任何内容。由于只有两种可能性,我会重写为if-statement:

if( ( i % 3 ) != 0 )
{
   System.out.println( i );
}

在我看来更具可读性并更清楚地传达意图。

更多关于实际陈述:

switch( i % 3 )
{
      case 0:
         //do nothing
       break; // leave switch - statement
      ...
}

离开switch语句需要中断。所以是的,这是必要的。