我必须编写一个程序,打印出所有小于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;
}
}
}
}
}
答案 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
第一步是将问题分成两部分。
你们大多数都是第一部分。你的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;