使用嵌套for循环的沙漏代码逻辑错误

问题描述 投票:0回答:2

我正在做一项作业,需要使用嵌套 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
|""""""""""|
 \::::::::/
  \::::::::::/
   \::/
    ||
java nested-loops
2个回答
0
投票

有时,像简单的执行一样通读代码并逐步执行它会有所帮助。或者,如果您已经熟悉调试器,则可以在观察变量变化的同时逐行单步执行代码。 这样做你应该注意到这部分代码的问题:

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

意味着什么

0
投票

第二个 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;

我想这应该可以解决它:) 最好的问候

© www.soinside.com 2019 - 2024. All rights reserved.