我试图为素数创建一个布尔数组。我应该以这样的结果结束:
Java PrimeArray 9
1 2 3 4 5 6 7 8 9
1 T T T T T T T T
2 T T F T F T F T
3 T T T T F T T F
4 T F T T F T F T
5 T T T T T T T T
6 T F F F T T F F
7 T T T T T T T T
8 T F T F T F T T
9 T T F T T F T T
我没有得到正确的结果。它不是按行和列打印的。我是编程新手,但我尝试了数组的不同功能,但没有运气。有人能给我一些建议吗?
public class PrimeArray {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
boolean[][] rpa = new boolean[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
if (i == j)
System.out.print(" ");
else if ((i % j == 1))
System.out.print("T");
else
System.out.print("F");
System.out.print(i);
}
}
}
- 正如我所看到的,您没有使用
System.out.print(i)
而不是System.out.println(i)
来省略换行 - 你也没有使用括号内循环,它不是那么明显地理解循环上下文。
- 你可以阅读更多关于错误"找不到符号"这里:什么是"找不到符号"?或"无法解析符号";错误的意思吗?
试试这个
static int gcd(int a, int b) {
while (b != 0) {
int bb = b;
b = a % b;
a = bb;
}
return Math.abs(a);
}
public static void main(String[] args) {
int n = 9;
System.out.print(" ");
for (int j = 1; j <= n; j++)
System.out.print(" " + j);
System.out.println();
for (int i = 1; i <= n; i++) {
System.out.print(i);
for (int j = 1; j <= n; j++)
if (i == j)
System.out.print(" ");
else if (gcd(i, j) == 1)
System.out.print(" T");
else
System.out.print(" F");
System.out.println();
}
}
输出:
1 2 3 4 5 6 7 8 9
1 T T T T T T T T
2 T T F T F T F T
3 T T T T F T T F
4 T F T T F T F T
5 T T T T T T T T
6 T F F F T T F F
7 T T T T T T T T
8 T F T F T F T T
9 T T F T T F T T
下面是更详细的代码版本。感谢saka1029提供的最大公分母代码。
这是我一次测试的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 T T T T T T T T T T T T T T
2 T T F T F T F T F T F T F T
3 T T T T F T T F T T F T T F
4 T F T T F T F T F T F T F T
5 T T T T T T T T F T T T T F
6 T F F F T T F F F T F T F F
7 T T T T T T T T T T T T F T
8 T F T F T F T T F T F T F T
9 T T F T T F T T T T F T T F
10 T F T F F F T F T T F T F F
11 T T T T T T T T T T T T T T
12 T F F F T F T F F F T T F F
13 T T T T T T T T T T T T T T
14 T F T F T F F F T F T F T T
15 T T F T F F T T F F T F T T
我使用String.format
和StringBuilder
来创建表。此代码适用于任何正最大值,尽管较大的数字将难以显示。
我把代码分解成方法。当然,这段代码可以写得更短,但目标是让阅读代码的人理解代码。
public class RelativePrimeNumbers {
public static void main(String[] args) {
try {
int maximum = Integer.valueOf(args[0]);
RelativePrimeNumbers rpn = new RelativePrimeNumbers();
System.out.println(rpn.createRelativePrimeTable(maximum));
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
public String createRelativePrimeTable(int maximum) {
int length = Integer.toString(maximum).length() + 1;
String numberFormatter = "%" + length + "d";
String letterFormatter = "%" + length + "s";
StringBuilder builder = new StringBuilder();
builder.append(createHeaderLine(maximum, numberFormatter, letterFormatter));
builder.append(System.lineSeparator());
for (int index = 1; index <= maximum; index++) {
builder.append(createDetailLine(index, maximum,
numberFormatter, letterFormatter));
builder.append(System.lineSeparator());
}
return builder.toString();
}
private StringBuilder createHeaderLine(int maximum, String numberFormatter,
String letterFormatter) {
StringBuilder builder = new StringBuilder();
builder.append(String.format(letterFormatter, " "));
for (int index = 0; index < maximum; index++) {
builder.append(String.format(numberFormatter, (index + 1)));
}
return builder;
}
private StringBuilder createDetailLine(int index, int maximum,
String numberFormatter, String letterFormatter) {
StringBuilder builder = new StringBuilder();
builder.append(String.format(numberFormatter, index));
for (int jndex = 1; jndex <= maximum; jndex++) {
if (index == jndex) {
builder.append(String.format(letterFormatter, " "));
} else if (calculateGCD(index, jndex) == 1) {
builder.append(String.format(letterFormatter, "T"));
} else {
builder.append(String.format(letterFormatter, "F"));
}
}
return builder;
}
private int calculateGCD(int a, int b) {
while (b != 0) {
int bb = b;
b = a % b;
a = bb;
}
return Math.abs(a);
}
}