使用循环在 Java 中制作 table
Making a table in Java using loops
我必须使用循环在 Java 中创建一个 table。它需要在一列中打印出 1-78,然后每五次打印 15-75(例如 15、20、55、... 75)78 次(因为循环需要打印出总共 78 个值;因此循环需要迭代 6 次)在第二列中,然后每三次打印 15-30(例如 15、18、21、24、...30)78 次(因为循环总共需要打印 78值;因此循环需要迭代 13 次),在第三列中,然后是第四列中的数字 4。
这是我目前所拥有的:
import java.util.Scanner;
public class Sandbox {
public static void main(String[] args) { //main method
int angles = 10;
double cosines =4;
int meters =12;
for (int i =1; i<=78;i++){
System.out.println(i);
}
for (int j = 1; j <=6; j++) {
for (angles =10 ;angles<75;) {
angles +=5;
for (meters=12; meters <30;) {
meters +=3;
int num1= 4;
System.out.print( ")" +angles + "|"+ meters) +4);
}
}
}
这会输出正确的值,但会以 1-78 然后是米 = 30 然后是 15-75 的值 78 次的方式打印它们。
我认为这符合您的要求:
public static void main(String[] args) { //main method
int angles = 15;
double cosines =4;
int meters =15;
for (int i =1; i<=78;i++){
System.out.print(i);
System.out.print('|');
System.out.print(angles);
angles+=5;
if (angles>75){
angles=15;
}
System.out.print('|');
System.out.print(meters);
meters+=3;
if (meters>30){
meters=15;
}
System.out.println("|4|");
}
}
你对所有循环次数感到困惑,问题是你需要生成 78 行,你需要循环 78 次,句号。然后对于每个循环,您打印变量,根据需要递增和重置它们,然后循环返回。
一个可能的解决方案是首先将整个输出构建在一个 78×4(或 4×78)数组中,然后在两个嵌套循环中将其全部打印出来。如果这对您来说更容易或感觉更自然。这样您就可以在您的原始程序中重用这个想法和大部分代码。
public static void main(String[] args) {
int[][] table = new int[4][78];
// generate table
int angles = 10;
double cosines = 4;
int meters = 12;
int line = 0;
for (int i = 1; i <= 78; i++) {
table[0][line] = i;
line++;
}
line = 0;
for (int j = 1; j <= 6; j++)
for (angles = 10; angles < 75;) {
angles += 5;
table[1][line] = angles;
line++;
}
line = 0;
for (int j = 1; j <= 13; j++)
for (meters = 12; meters < 30;) {
meters += 3;
table[2][line] = meters;
table[3][line] = 4;
line++;
}
// print table
for (line = 0; line < 78; line++) {
System.out.print(table[0][line]);
for (int column = 1; column < 4; column++) {
System.out.print("|" + table[column][line]);
}
System.out.println();
}
}
你需要的是在整个循环内部构建输入,假设你想要一个 table like
1 | 15 20 25 30 ... 75 | 15 18 21 ... 30 | 4
2 | 15 20 25 30 ... 75 | 15 18 21 ... 30 | 4
....
为了构建它,您需要嵌套循环和输出。只要循环简单就可以很简单。
for (int i = 1; i <= 78; i++)
{
System.out.print(i + " | ");
for (int j = 15; j <=75; j += 5)
System.out.print(j + " ");
System.out.print("| ");
for (int k = 15; k <= 30; k += 3)
System.out.print(k + " ");
System.out.print("| 4 |");
System.out.println("");
}
正如 Kira Yakuza 在 中提到的那样,您最好将其划分为方法。
请注意,您的问题在示例输出中有些不清楚,这就是我解释您所写内容的方式。如果你想要不同的输出,你应该编辑你的问题来澄清。
您可以根据数据类型的索引、最大值、因子和偏移量来计算值。使用此信息,您可以生成每一行,无论您位于哪个索引。
TablePrinter.java
public class TablePrinter {
public static interface RowPrinter {
String print(int rowIndex, int dataIndex, Object[][] data);
}
public static void main(String[] args) {
// { label, max, factor, offset }
Object[][] data = {
{ "angles", 75, 5, 10 },
{ "meters", 30, 3, 12 }
};
printTable(data, new RowPrinter() {
@Override
public String print(int rowIndex, int dataIndex, Object[][] data) {
int max = (int) data[dataIndex][1];
int factor = (int) data[dataIndex][2];
int offset = (int) data[dataIndex][3];
return String.format(" | %8d", calculate(rowIndex, max, factor, offset));
}
});
}
public static void printTable(Object[][] data, RowPrinter rowPrinter) {
// Print headers
System.out.printf("%8s", "index");
for (int i = 0; i < data.length; i++) {
System.out.printf(" | %8s", data[i][0]);
}
System.out.println();
// Print data rows
for (int i = 0; i < 75; i++) {
System.out.printf("%8d", i + 1);
for (int j = 0; j < data.length; j++) {
System.out.printf(rowPrinter.print(i, j, data));
}
System.out.println();
}
}
public static int calculate(int index, int max, int factor, int offset) {
return ((index * factor) % (max - offset + factor)) + offset;
}
}
结果
index | angles | meters
1 | 10 | 12
2 | 15 | 15
3 | 20 | 18
4 | 25 | 21
5 | 30 | 24
6 | 35 | 27
7 | 40 | 30
8 | 45 | 12
9 | 50 | 15
10 | 55 | 18
11 | 60 | 21
12 | 65 | 24
13 | 70 | 27
14 | 75 | 30
15 | 10 | 12
16 | 15 | 15
17 | 20 | 18
18 | 25 | 21
19 | 30 | 24
20 | 35 | 27
21 | 40 | 30
22 | 45 | 12
23 | 50 | 15
24 | 55 | 18
25 | 60 | 21
26 | 65 | 24
27 | 70 | 27
28 | 75 | 30
29 | 10 | 12
30 | 15 | 15
31 | 20 | 18
32 | 25 | 21
33 | 30 | 24
34 | 35 | 27
35 | 40 | 30
36 | 45 | 12
37 | 50 | 15
38 | 55 | 18
39 | 60 | 21
40 | 65 | 24
41 | 70 | 27
42 | 75 | 30
43 | 10 | 12
44 | 15 | 15
45 | 20 | 18
46 | 25 | 21
47 | 30 | 24
48 | 35 | 27
49 | 40 | 30
50 | 45 | 12
51 | 50 | 15
52 | 55 | 18
53 | 60 | 21
54 | 65 | 24
55 | 70 | 27
56 | 75 | 30
57 | 10 | 12
58 | 15 | 15
59 | 20 | 18
60 | 25 | 21
61 | 30 | 24
62 | 35 | 27
63 | 40 | 30
64 | 45 | 12
65 | 50 | 15
66 | 55 | 18
67 | 60 | 21
68 | 65 | 24
69 | 70 | 27
70 | 75 | 30
71 | 10 | 12
72 | 15 | 15
73 | 20 | 18
74 | 25 | 21
75 | 30 | 24
我必须使用循环在 Java 中创建一个 table。它需要在一列中打印出 1-78,然后每五次打印 15-75(例如 15、20、55、... 75)78 次(因为循环需要打印出总共 78 个值;因此循环需要迭代 6 次)在第二列中,然后每三次打印 15-30(例如 15、18、21、24、...30)78 次(因为循环总共需要打印 78值;因此循环需要迭代 13 次),在第三列中,然后是第四列中的数字 4。 这是我目前所拥有的:
import java.util.Scanner;
public class Sandbox {
public static void main(String[] args) { //main method
int angles = 10;
double cosines =4;
int meters =12;
for (int i =1; i<=78;i++){
System.out.println(i);
}
for (int j = 1; j <=6; j++) {
for (angles =10 ;angles<75;) {
angles +=5;
for (meters=12; meters <30;) {
meters +=3;
int num1= 4;
System.out.print( ")" +angles + "|"+ meters) +4);
}
}
}
这会输出正确的值,但会以 1-78 然后是米 = 30 然后是 15-75 的值 78 次的方式打印它们。
我认为这符合您的要求:
public static void main(String[] args) { //main method
int angles = 15;
double cosines =4;
int meters =15;
for (int i =1; i<=78;i++){
System.out.print(i);
System.out.print('|');
System.out.print(angles);
angles+=5;
if (angles>75){
angles=15;
}
System.out.print('|');
System.out.print(meters);
meters+=3;
if (meters>30){
meters=15;
}
System.out.println("|4|");
}
}
你对所有循环次数感到困惑,问题是你需要生成 78 行,你需要循环 78 次,句号。然后对于每个循环,您打印变量,根据需要递增和重置它们,然后循环返回。
一个可能的解决方案是首先将整个输出构建在一个 78×4(或 4×78)数组中,然后在两个嵌套循环中将其全部打印出来。如果这对您来说更容易或感觉更自然。这样您就可以在您的原始程序中重用这个想法和大部分代码。
public static void main(String[] args) {
int[][] table = new int[4][78];
// generate table
int angles = 10;
double cosines = 4;
int meters = 12;
int line = 0;
for (int i = 1; i <= 78; i++) {
table[0][line] = i;
line++;
}
line = 0;
for (int j = 1; j <= 6; j++)
for (angles = 10; angles < 75;) {
angles += 5;
table[1][line] = angles;
line++;
}
line = 0;
for (int j = 1; j <= 13; j++)
for (meters = 12; meters < 30;) {
meters += 3;
table[2][line] = meters;
table[3][line] = 4;
line++;
}
// print table
for (line = 0; line < 78; line++) {
System.out.print(table[0][line]);
for (int column = 1; column < 4; column++) {
System.out.print("|" + table[column][line]);
}
System.out.println();
}
}
你需要的是在整个循环内部构建输入,假设你想要一个 table like
1 | 15 20 25 30 ... 75 | 15 18 21 ... 30 | 4
2 | 15 20 25 30 ... 75 | 15 18 21 ... 30 | 4
....
为了构建它,您需要嵌套循环和输出。只要循环简单就可以很简单。
for (int i = 1; i <= 78; i++)
{
System.out.print(i + " | ");
for (int j = 15; j <=75; j += 5)
System.out.print(j + " ");
System.out.print("| ");
for (int k = 15; k <= 30; k += 3)
System.out.print(k + " ");
System.out.print("| 4 |");
System.out.println("");
}
正如 Kira Yakuza 在
请注意,您的问题在示例输出中有些不清楚,这就是我解释您所写内容的方式。如果你想要不同的输出,你应该编辑你的问题来澄清。
您可以根据数据类型的索引、最大值、因子和偏移量来计算值。使用此信息,您可以生成每一行,无论您位于哪个索引。
TablePrinter.java
public class TablePrinter {
public static interface RowPrinter {
String print(int rowIndex, int dataIndex, Object[][] data);
}
public static void main(String[] args) {
// { label, max, factor, offset }
Object[][] data = {
{ "angles", 75, 5, 10 },
{ "meters", 30, 3, 12 }
};
printTable(data, new RowPrinter() {
@Override
public String print(int rowIndex, int dataIndex, Object[][] data) {
int max = (int) data[dataIndex][1];
int factor = (int) data[dataIndex][2];
int offset = (int) data[dataIndex][3];
return String.format(" | %8d", calculate(rowIndex, max, factor, offset));
}
});
}
public static void printTable(Object[][] data, RowPrinter rowPrinter) {
// Print headers
System.out.printf("%8s", "index");
for (int i = 0; i < data.length; i++) {
System.out.printf(" | %8s", data[i][0]);
}
System.out.println();
// Print data rows
for (int i = 0; i < 75; i++) {
System.out.printf("%8d", i + 1);
for (int j = 0; j < data.length; j++) {
System.out.printf(rowPrinter.print(i, j, data));
}
System.out.println();
}
}
public static int calculate(int index, int max, int factor, int offset) {
return ((index * factor) % (max - offset + factor)) + offset;
}
}
结果
index | angles | meters
1 | 10 | 12
2 | 15 | 15
3 | 20 | 18
4 | 25 | 21
5 | 30 | 24
6 | 35 | 27
7 | 40 | 30
8 | 45 | 12
9 | 50 | 15
10 | 55 | 18
11 | 60 | 21
12 | 65 | 24
13 | 70 | 27
14 | 75 | 30
15 | 10 | 12
16 | 15 | 15
17 | 20 | 18
18 | 25 | 21
19 | 30 | 24
20 | 35 | 27
21 | 40 | 30
22 | 45 | 12
23 | 50 | 15
24 | 55 | 18
25 | 60 | 21
26 | 65 | 24
27 | 70 | 27
28 | 75 | 30
29 | 10 | 12
30 | 15 | 15
31 | 20 | 18
32 | 25 | 21
33 | 30 | 24
34 | 35 | 27
35 | 40 | 30
36 | 45 | 12
37 | 50 | 15
38 | 55 | 18
39 | 60 | 21
40 | 65 | 24
41 | 70 | 27
42 | 75 | 30
43 | 10 | 12
44 | 15 | 15
45 | 20 | 18
46 | 25 | 21
47 | 30 | 24
48 | 35 | 27
49 | 40 | 30
50 | 45 | 12
51 | 50 | 15
52 | 55 | 18
53 | 60 | 21
54 | 65 | 24
55 | 70 | 27
56 | 75 | 30
57 | 10 | 12
58 | 15 | 15
59 | 20 | 18
60 | 25 | 21
61 | 30 | 24
62 | 35 | 27
63 | 40 | 30
64 | 45 | 12
65 | 50 | 15
66 | 55 | 18
67 | 60 | 21
68 | 65 | 24
69 | 70 | 27
70 | 75 | 30
71 | 10 | 12
72 | 15 | 15
73 | 20 | 18
74 | 25 | 21
75 | 30 | 24