提问人:Arunim Goyal 提问时间:10/15/2023 最后编辑:Arunim Goyal 更新时间:10/16/2023 访问量:154
如何在Java中制作这种模式?
How to make this pattern in Java?
问:
| || || || || || || ||<3|
| || || || || || ||<3||##|
| || || || || ||<3||##||<3|
| || || || ||<3||##||<3||##|
| || || ||<3||##||<3||##||<3|
| || ||<3||##||<3||##||<3||##|
| ||<3||##||<3||##||<3||##||<3|
|<3||##||<3||##||<3||##||<3||##|
这就是模式。必须使用流控制(if、for、else if 等)。不能只是打印或一一书写。到目前为止,我的代码是:
class Main {
public static void main(String [] args){
int x;
for(int y = 1; y < 9; y++){
for(x = 1; x < 9; x++){
if(x > 8 - y){
Stairs(true);
Stairs(false);
}
else{
System.out.print("| |");
}
}
System.out.println();
}
}
public static void Stairs(boolean odd){
System.out.print("|" + ((odd)? "<3" : "##") + "|");
}
}
这是输出。我无法找出问题所在
| || || || || || || ||<3||##|
| || || || || || ||<3||##||<3||##|
| || || || || ||<3||##||<3||##||<3||##|
| || || || ||<3||##||<3||##||<3||##||<3||##|
| || || ||<3||##||<3||##||<3||##||<3||##||<3||##|
| || ||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
| ||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
|<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
答:
0赞
Reilas
10/15/2023
#1
"...这是输出。我很难弄清楚问题所在”
我已经运行了代码,由于内部循环值,它似乎失败了。
下面是一个示例。
StringBuilder s = new StringBuilder();
String s1 = "<3", s2 = "##";
boolean b;
for (int i = 7, j; i >= 0; i--) {
s.append("| |".repeat(i));
b = false;
for (j = i; j < 8; j++)
s.append("|%s|".formatted((b = !b) ? s1 : s2));
s.append("%n".formatted());
}
输出
| || || || || || || ||<3|
| || || || || || ||<3||##|
| || || || || ||<3||##||<3|
| || || || ||<3||##||<3||##|
| || || ||<3||##||<3||##||<3|
| || ||<3||##||<3||##||<3||##|
| ||<3||##||<3||##||<3||##||<3|
|<3||##||<3||##||<3||##||<3||##|
1赞
54Coconi
10/15/2023
#2
这是我根据你的修改的代码:
class Main {
public static void main(String [] args){
int x;
boolean flag;
for(int y = 1; y < 9; y++){
for(x = 1; x < 9; x++){
if(x > 8 - y){
flag = true;
do{
Stairs(flag);
x++;
flag=!flag;
} while(x<9);
} else{
System.out.print("| |");
}
}
System.out.println();
}
}
public static void Stairs(boolean odd){
System.out.print("|" + ((odd)? "<3" : "##") + "|");
}
}
输出:
0赞
Slaw
10/15/2023
#3
你很接近。下面是略微重构的代码:
public class Main {
public static void main(String[] args) {
int numberOfSteps = 8;
for (int y = 1; y <= numberOfSteps; y++) {
for (int x = 1; x <= numberOfSteps; x++) {
if (x > numberOfSteps - y) {
System.out.print("|<3|");
System.out.print("|##|");
} else {
System.out.print("| |");
}
}
System.out.println();
}
}
}
这给出了这个(错误的)输出:
| || || || || || || ||<3||##|
| || || || || || ||<3||##||<3||##|
| || || || || ||<3||##||<3||##||<3||##|
| || || || ||<3||##||<3||##||<3||##||<3||##|
| || || ||<3||##||<3||##||<3||##||<3||##||<3||##|
| || ||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
| ||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
|<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##||<3||##|
这两个循环针对每个“步骤”进行迭代。这意味着对于内部循环的每次迭代,您应该只打印出一个步骤。但是上面将为每个非空步骤打印两个步骤。该行为来自:for
for
System.out.print("|<3|");
System.out.print("|##|");
需要修改代码,以便仅打印 或,而不是同时打印两者。|<3|
|##|
查看预期的输出,我们可以看到“步骤”在水平方向和垂直方向上交替。在代码中,我们可以访问 和 。这两个数字也在偶数和奇数之间交替。如果我们查看每个步骤的值和,我们将看到一个模式。A 仅在奇数和偶数时打印,反之亦然1.换言之,只有当 和 具有不同的奇偶校验时,才会打印 a。x
y
x
y
|<3|
x
y
|<3|
x
y
利用这些知识,我们可以修改原始代码,得到2 个:
public class Main {
public static void main(String[] args) {
int numberOfSteps = 8;
for (int y = 1; y <= numberOfSteps; y++) {
for (int x = 1; x <= numberOfSteps; x++) {
if (x > numberOfSteps - y) {
if (x % 2 != y % 2) {
System.out.print("|<3|");
} else {
System.out.print("|##|");
}
} else {
System.out.print("| |");
}
}
System.out.println();
}
}
}
现在,它为我们提供了预期的输出:
| || || || || || || ||<3|
| || || || || || ||<3||##|
| || || || || ||<3||##||<3|
| || || || ||<3||##||<3||##|
| || || ||<3||##||<3||##||<3|
| || ||<3||##||<3||##||<3||##|
| ||<3||##||<3||##||<3||##||<3|
|<3||##||<3||##||<3||##||<3||##|
1. 当 x
和 y
从 1
开始时。
2. %
是模运算符。一个数字 n 是偶数,如果
n % 2 == 0
;如果 n % 2 == 1
,那就很奇怪了。因此,如果 x % 2 != y % 2
,则 x
和 y
具有不同的奇偶校验(即,一个是偶数,另一个是奇数)。
0赞
Idle_Mind
10/16/2023
#4
另一个,但这个版本要求多少个楼梯:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("How many stairs? ");
int numStairs = sc.nextInt();
if (numStairs >= 1) {
for(int row=1; row<=numStairs; row++) {
boolean heart = true;
for(int col=1; col<=numStairs; col++) {
System.out.print("|");
if (col <= (numStairs-row)) {
System.out.print(" ");
}
else {
System.out.print(heart ? "<3" : "##");
heart = !heart;
}
System.out.print("|");
}
System.out.println();
}
}
else {
System.out.println("Number of stairs must be greater than or equal to one!");
}
}
}
试运行:
How many stairs? 8
| || || || || || || ||<3|
| || || || || || ||<3||##|
| || || || || ||<3||##||<3|
| || || || ||<3||##||<3||##|
| || || ||<3||##||<3||##||<3|
| || ||<3||##||<3||##||<3||##|
| ||<3||##||<3||##||<3||##||<3|
|<3||##||<3||##||<3||##||<3||##|
评论
x > 8 - y
if (x > 8 - y)
"|##|"
"|<3|"
Stairs(condition)
condition
Stairs