直角三角形的长度 (Java Eclipse):用户输入图表

Length of a right Triangle (Java Eclipse): User input chart

import java.util.Scanner;

public class TriangleDriver {

 public static void main(String[] args) {
    System.out.println("Please enter value of N: ");

    Scanner scan = new Scanner(System.in);
    int num = scan.nextInt();

    for (int i = 1; i <= num; i++) {
        System.out.printf("%d\t", i);
    }
    System.out.println("");
    System.out.println("----    ----");
    for (int i = 0; i < num; i++) {
        System.out.print((i + 1) + "    ");
        for (int j = 1; j <= num; j++) {
            System.out.printf("%7.2f", Math.sqrt(i * i + j * j));
        }
        System.out.println();
    }
}
}

这可能对其他刚接触编码的人有用。不过我确实需要帮助。当你输入一个数字时,比如 8,

-间距不正确

-第一行实际数据不应包括1.00、2.00、3.00

-个人偏好:我想在 i 数字和 | 之后的顶部包括 ----在 J 号旁边

大家怎么看?

最终结果:

import java.util.Scanner;

public class TriangleDriver {

    public static void main(String[] args) {
        System.out.println("Please enter value of N: ");

        Scanner scan = new Scanner(System. in );
        int num = scan.nextInt();

        System.out.print("\t");
        for (int i = 1; i <= num; i++) {
            System.out.printf("%d\t", i);
        }
        System.out.println();

        String barrier = "\t";
        for (int i = 0; i < num; i++)
        barrier += "----\t";
        System.out.println(barrier);

        for (int i = 0; i < num; i++) {
            System.out.print((i + 1) + "");
            for (int j = 1; j <= num; j++) {
                System.out.printf("\t%.2f", Math.sqrt(i * i + j * j));
            }
            System.out.println();
        }
    }
}

解释:

首先,您在 printf() 中使用了 7.2f,这很难解决。 7.2f 中的 7 声明您希望输出始终为 7 个空格长,无论数字长度如何。这不等于 \t 添加的数量,因此列不对齐。为了在每行下方创建 ---- 障碍,我使用了 for 循环来添加 N 部分。添加 |s.

应该很容易

关于

The first actual row of data should not include 1.00, 2.00, 3.00

我不知道你真正想要什么。我不确定您希望第一个值是什么 - 它似乎遵循您用来为其他行生成数据的 Math.sqrt(i * i + j * j) 计算。

这与您的代码应该看起来很接近

public class TriangleDriver {
    private static final String REQUEST = "Please enter value of N: ";
    private static final String SPACER3 = "   ";
    private static final String SPACER4 = "    ";
    private static final String DIVIDER = "----";
    private static final String FORMAT_ONE = "  %d    ";
    private static final String FORMAT_FIRST_ROW = "%7.0f";
    private static final String FORMAT_ADDITIONAL_ROWS = "%7.2f";
    private static final int HEADER_LINES = 2;

    public static void main(String[] args) {
        int num = getIntInput(REQUEST);
        StringBuilder[] result = solution(num);
        printSBArray(result);
    }

    static private int getIntInput(String request){
        System.out.print(request);
        return new Scanner(System.in).nextInt();
    }

    static private void printSBArray(StringBuilder[] sbArray){
        for (StringBuilder sb : sbArray)
            System.out.println(sb.toString());
    }

    static private StringBuilder[] solution(int num){
        StringBuilder output[] = new StringBuilder[num + HEADER_LINES];
        for(int i = 0; i < output.length; i++)
            output[i] = new StringBuilder("");

        // build line 0
        output[0].append(SPACER4 + SPACER4);
        for (int i = 1; i <= num; i++) {
            output[0].append(String.format(FORMAT_ONE, i));
        }

        // build line 1
        output[1].append(DIVIDER + SPACER4);
        for (int i = 0; i < num; i++)
            output[1].append(String.format(DIVIDER + SPACER3));

        // build line 2
        int i = 0;
        output[2].append((i + 1) + SPACER4);
        for (int j = 1; j <= num; j++) {
            output[2].append(String.format(FORMAT_FIRST_ROW, Math.sqrt(i * i + j * j)));
        }

        // build line 3+
        for (i = 1; i < num; i++) {
            output[i + 2].append((i + 1) + SPACER4);
            for (int j = 1; j <= num; j++) {
                output[i + 2].append(String.format(FORMAT_ADDITIONAL_ROWS, Math.sqrt(i * i + j * j)));
            }
        }
        return output;
    }
}

这提供了很好的功能分离,将字符串保留在逻辑代码之外,并将主要调用最小化为仅必要的调用。还使用 StringBuilder 构建结果。这允许您保持功能分离。代码应该做一件事,即计算结果但不打印结果。从技术上讲,这应该被分成它自己的 class.

顺便说一句,我不会把这个交上来,因为你的作业你的老师可能会有点怀疑。