将嵌套循环复合数放入列中

时间:2016-01-28 21:41:34

标签: java

我必须编写一个程序,打印出所有小于100的复合数。我必须使用嵌套循环来完成这个程序。此外,值必须显示在每列中包含10个数字的表中。

我现在已经尝试了这个程序一个多星期了,我刚刚完全迷失了,我可以帮忙吗?

我做了复合数字部分,但是你究竟如何将数字放入每列中包含10个数字的列中?这是代码:

import java.util.Scanner;

class SwitchStatements {
    public static void main(String[]Args) {
     for (int i = 0; i <= 100; i++) {
        for (int j = 2; j <= i/2; j++) {
            if (i % j == 0) {
               System.out.println(i);
               break;
            }
         }
      }
   }
}

3 个答案:

答案 0 :(得分:0)

您的意思是每行10个数字(即总共10个数字),或每列10个数字?

假设你的意思是输出中的“表”看起来像这样(在这个例子中有5列):

1  2  3  4  5 
11 12 13 14 15

然后我认为您要做的是跟踪您在此行上打印的数量,并且仅在您打印10个数字时使用System.out.println,否则使用System.out.print

int numbersPrinted = 0;
for (int i = 0; i <= 100; i++) {
    for (int j = 2; j <= i/2; j++) {
        if (i % j == 0) {
            if (numbersPrinted < 9) {
                System.out.print(i + " ");
                numbersPrinted++;
            } else {
                System.out.println(i);
                numbersPrinted = 0;
            }
            break;
         }
     }
}

如果你希望数字整齐排列,你可以添加两个空格而不是一个,如果我小于10(因此只有一个数字)。

如果你的意思是你想要每列10个数字(在我的例子中又是5个):

1  2
3  4
5  6
7  8
9  10

然后你需要每行打印(每列数字/ 10个数字)列,所以你不能像你的例子那样在你的嵌套循环中打印它们。相反,您需要将它们添加到ArrayList或类似物中,然后在单独的循环中打印它们:

ArrayList<int> numbersToPrint = new ArrayList<int>();
...
if (i % j == 0) {
    numbersToPrint.add(i);
    break;
}
...
int numbersPerRow = (numbersToPrint.size()/10);
int numbersPrinted = 0;
for (int i : numbersToPrint) {
    if (numbersPrinted < (numbersPerRow - 1)) {
...

其余部分与我上面的第一个例子相同。

答案 1 :(得分:0)

如果您确实要在每列中包含10个数字,请检查此代码。它可以用较少的周期完成,但是更难以理解。 我们在这里做的是收集要列出的所有复合数字。以奇怪的顺序从该列表中填充二维数组(不像往常一样逐行,而是逐列)。然后按照通常的顺序在第3个循环中打印它。

webView.getSettings().setJavaScriptEnabled(true);

你会得到不错的输出:

    public static void main(String[] args) {
    List<Integer> compositeNumbers = new ArrayList<>();
    for (int i = 0; i <= 100; i++) {
        for (int j = 2; j <= i / 2; j++) {
            if (i % j == 0) {
                compositeNumbers.add(i);
                break;
            }
        }
    }

    int n = compositeNumbers.size();
    int numberOfRows = 10;
    int maxNumberOfColumns = (n / numberOfRows) + 1;

    int[][] numbers = new int[numberOfRows][maxNumberOfColumns];

    for (int j = 0; j < maxNumberOfColumns; j++) {
        for (int i = 0; i < numberOfRows; i++) {
            int index = i + j * numberOfRows;
            if (index < n) {
                numbers[i][j] = compositeNumbers.get(index);
            }
        }
    }

    for (int i = 0; i < numberOfRows; i++) {
        for (int j = 0; j < maxNumberOfColumns; j++) {
            if (i + j * numberOfRows < n)
                System.out.print(String.format("% 3d", numbers[i][j]));
        }
        System.out.println();
    }
}

答案 2 :(得分:-1)

修改复合计算方法。

假设你正在寻找这样的东西:

on run {input, parameters}
    tell application "Finder"
        if exists of application process "AutoRaise" then
            quit application "/Applications/AutoRaise"
            display notification "AutoRaise Stopped"
        else
            launch application "/Applications/AutoRaise"
            display notification "AutoRaise Started"
        end if
    end tell
    return input
end run

第一步是将问题分成两部分。

  1. 生成4到100之间的所有复合数字。
  2. 以列显示所有合成数字。
  3. 你们大多数都是第一部分。你的for循环配置有一些错误。

    您可以将所有复合数字保存在List&lt; Integer&gt;。

    您可以使用此行计算列数:

     4    20    33    46    58    72    85    96
     6    21    34    48    60    74    86    98
     8    22    35    49    62    75    87    99
     9    24    36    50    63    76    88   100
    10    25    38    51    64    77    90
    12    26    39    52    65    78    91
    14    27    40    54    66    80    92
    15    28    42    55    68    81    93
    16    30    44    56    69    82    94
    18    32    45    57    70    84    95
    

    由于你必须创建一个完整的行来打印它,你可以取0位的复合整数,然后取10位的复合整数(假设每列10个数)。然后是位置20的复合整数,依此类推,直到你创建了一个完整的行。

    最后几行中最后几行可能没有数字。创建显示行时必须考虑到这一点。

    这里是将所有这些放在一起的代码。 calculateCompositeNumbers方法计算合成数。 displayCompositeNumbers方法以列显示合成数字。

    了解方法名称如何告诉您它们的作用。

        int columns = (compositeNumbers.size() + columnLength - 1)
                / columnLength;