【问题标题】:How to Print 2D Boolean Arrays in Java如何在 Java 中打印二维布尔数组
【发布时间】:2021-11-13 04:49:02
【问题描述】:

我正在尝试为素数创建一个布尔数组。我应该得到如下结果:

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 将打印而不会导致换行。

标签: java arrays boolean


【解决方案1】:

【讨论】:

  • 看看这部分问题:“我意识到我需要打印 rpa[i][j],但每次我尝试这样做时,它都会告诉我找不到i 或 j”。 (但我可能会误解)
【解决方案2】:

试试这个。

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  

【讨论】:

  • 谢谢!我将您解决方案的第二部分放入我的布尔数组中并对其进行了一些调整。效果很好!
【解决方案3】:

这里是更详细的代码版本。感谢 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);
    }

}

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 2012-08-31
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多