直角三角形的长度 (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.
顺便说一句,我不会把这个交上来,因为你的作业你的老师可能会有点怀疑。
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.
顺便说一句,我不会把这个交上来,因为你的作业你的老师可能会有点怀疑。