如何用Java打印二维布尔数组



我试图为素数创建一个布尔数组。我应该以这样的结果结束:

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.formatStringBuilder来创建表。此代码适用于任何正最大值,尽管较大的数字将难以显示。

我把代码分解成方法。当然,这段代码可以写得更短,但目标是让阅读代码的人理解代码。

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);
}
}