我正在做一项作业,需要使用嵌套 for 循环打印沙漏。输入的基数(首引号的个数)是用户输入的,奇偶的区别是中间有一个冒号。 我目前正在研究 UpCone,甚至还没有开始处理下锥的混乱,我需要帮助,因为我找不到逻辑错误,为什么冒号 # 打印的内容比我想要的更多,即使在通过减去 2 调整 baseVal 之后 我的代码:
`public class HourglassProject {
/*
* Print Base
* Print Middle
* Print invPyrimid
* Print Pyrimid
*/
public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);
System.out.println("enter the length of the base(# of colons), reccomended 10/12");
int numLength = userInput.nextInt();
printBase(numLength);
upCone(numLength);
userInput.close();
}
public static void printBase(int baseNum) {
String quotation = "";
for (int i = 0; i < baseNum; i++) {
quotation += "\"";
}
System.out.println("|"+ quotation +"|");
}
** public static void upCone(int baseVal) {
int lineNum = 0;
String colon= "";
String space = "";
//for loops: Line, Spaces; Colon shrink
while(baseVal > 0) {
for(int i = 0; i <= lineNum; i++) {
System.out.print(" ");
for(int j = 1; j <= (baseVal - 2); j++) {
colon += ":";
}
baseVal -= 2;
}
lineNum++;
System.out.println("\\" + colon + "/");
colon = "";
}**
for(int i = 0; i <= lineNum; i++) {
space += " ";
}
if(baseVal % 2 == 0) {
System.out.println(space + "||");
} else {
System.out.println(space + "|:|");
}
}`
Desired:
|””””””””””|
\::::::::/
\::::::/
\::::/
\::/
||
/::\
/::::\
/::::::\
/::::::::\
|””””””””””|
What I have:
enter the length of the base(# of colons), reccomended 10/12
10
|""""""""""|
\::::::::/
\::::::::::/
\::/
||
有时,像简单的执行一样通读代码并逐步执行它会有所帮助。或者,如果您已经熟悉调试器,则可以在观察变量变化的同时逐行单步执行代码。 这样做你应该注意到这部分代码的问题:
while(baseVal > 0) {
for(int i = 0; i <= lineNum; i++) {
System.out.print(" ");
for(int j = 1; j <= (baseVal - 2); j++) {
colon += ":";
}
baseVal -= 2;
}
lineNum++;
System.out.println("\\" + colon + "/");
colon = "";
}
具体查看外部
for
循环在最外层 while
的每次迭代中执行的操作(尤其是在第一次迭代之后)。跟踪 lineNum
的变化以及它对 baseVal
和 colon
意味着什么
第二个 for 循环不应嵌套在前一个循环中:
while(baseVal > 0) {
for(int i = 0; i <= lineNum; i++) {
System.out.print(" ");
}
for(int j = 1; j <= (baseVal - 2); j++) {
colon += ":";
}
baseVal -= 2;
我想这应该可以解决它:) 最好的问候