打印带有嵌套循环的棋盘。 [Java]
Printing a checker board with nested loops. [Java]
我在打印代码时遇到问题。我需要打印一个带有用户输入大小的网格的棋盘。
应输出的示例。
Input a size (must be larger than 1):
5
0 * * *
1 * *
2 * * *
3 * *
4 * * *
这是我的代码:
import java.util.Scanner;
public class nestedpractice1
{
public static void main(String[] args)
{
Scanner kbinput = new Scanner(System.in);
//Create Size variable
System.out.println("Input a size: ");
int n = 0; n = kbinput.nextInt();
for(int r = 0; r < n; r++)
{
for(int c = 0; c < r; c++)
{
if((r%2) == 0)
{
System.out.print("*");
}
else if((r%1) == 0)
{
System.out.print(" *");
}
}
System.out.println("");
kbinput.close();
}
}
}
我的代码不断打印
**
****
通过查看您的代码,我发现了这些潜在的问题:
kbinput.close();
不应在循环内调用。
else if((r%1) == 0)
应该是 else if (r % 2 != 0)
,尽管在这种情况下 else
就足够了。
- 在
else
中,您可能想要 System.out.print(" ");
而不是 System.out.print(" *");
- 我相信
for(int c = 0; c < r; c++) {
应该循环只要 c < n
.
此循环精确地产生您指定的输出:
for (int r = 0; r < n; r++) {
System.out.print(r);
for (int c = 0; c < n; c++) {
System.out.print(r % 2 == 1 ^ c % 2 == 0 ? " *" : " ");
}
System.out.println();
}
我将内部循环的主体压缩为单个 print
语句。此语句使用 ^
(异或)运算符来测试条件,然后使用 ?:
(三元)运算符在条件为 true
时打印星号,在条件为false
.
我们可以拆分单个语句,同时保留其含义,如下所示:
boolean isOddRow = r % 2 == 1;
boolean isEvenCol = c % 2 == 0;
System.out.print(isOddRow ^ isEvenCol ? " *" : " ");
作为解释,我们只想在行和列都是偶数或奇数时打印 *
。所以如果行是偶数但列是奇数,或者如果行是奇数但列是偶数,我们只打印空格。
我们可以使用 ==
而不是 ^
来表达相同的逻辑:
boolean isEvenRow = r % 2 == 0;
boolean isEvenCol = c % 2 == 0;
System.out.print(isEvenRow == isEvenCol ? " *" : " ");
或者,如果您更喜欢普通的 if..else
而不是 shorthand 三元运算符:
if (isEvenRow == isEvenCol) {
System.out.print(" *");
} else {
System.out.print(" ");
}
我在打印代码时遇到问题。我需要打印一个带有用户输入大小的网格的棋盘。
应输出的示例。
Input a size (must be larger than 1):
5
0 * * *
1 * *
2 * * *
3 * *
4 * * *
这是我的代码:
import java.util.Scanner;
public class nestedpractice1
{
public static void main(String[] args)
{
Scanner kbinput = new Scanner(System.in);
//Create Size variable
System.out.println("Input a size: ");
int n = 0; n = kbinput.nextInt();
for(int r = 0; r < n; r++)
{
for(int c = 0; c < r; c++)
{
if((r%2) == 0)
{
System.out.print("*");
}
else if((r%1) == 0)
{
System.out.print(" *");
}
}
System.out.println("");
kbinput.close();
}
}
}
我的代码不断打印
**
****
通过查看您的代码,我发现了这些潜在的问题:
kbinput.close();
不应在循环内调用。else if((r%1) == 0)
应该是else if (r % 2 != 0)
,尽管在这种情况下else
就足够了。- 在
else
中,您可能想要System.out.print(" ");
而不是System.out.print(" *");
- 我相信
for(int c = 0; c < r; c++) {
应该循环只要c < n
.
此循环精确地产生您指定的输出:
for (int r = 0; r < n; r++) {
System.out.print(r);
for (int c = 0; c < n; c++) {
System.out.print(r % 2 == 1 ^ c % 2 == 0 ? " *" : " ");
}
System.out.println();
}
我将内部循环的主体压缩为单个 print
语句。此语句使用 ^
(异或)运算符来测试条件,然后使用 ?:
(三元)运算符在条件为 true
时打印星号,在条件为false
.
我们可以拆分单个语句,同时保留其含义,如下所示:
boolean isOddRow = r % 2 == 1;
boolean isEvenCol = c % 2 == 0;
System.out.print(isOddRow ^ isEvenCol ? " *" : " ");
作为解释,我们只想在行和列都是偶数或奇数时打印 *
。所以如果行是偶数但列是奇数,或者如果行是奇数但列是偶数,我们只打印空格。
我们可以使用 ==
而不是 ^
来表达相同的逻辑:
boolean isEvenRow = r % 2 == 0;
boolean isEvenCol = c % 2 == 0;
System.out.print(isEvenRow == isEvenCol ? " *" : " ");
或者,如果您更喜欢普通的 if..else
而不是 shorthand 三元运算符:
if (isEvenRow == isEvenCol) {
System.out.print(" *");
} else {
System.out.print(" ");
}