簡體   English   中英

這段代碼無限運行,我不知道為什么它不起作用

[英]This code runs infinitely, and I'm clueless on why it isn't working

public class Main1
{
    public static void main(String[] args)
    {
        printNumbers(7, 3);
    }

    public static int printNumbers(int numValue, int rows) {
        for (int i = 0; i < rows; i++) {
            int x = (int)(Math.random() * 10);
            System.out.print(x);
            if (numValue == x && i < rows) {
                System.out.println(" ");
            } else if (i < rows) {
                System.out.print(x);
            }
        }
        return printNumbers(7, 3);
    }
}    

它應該打印隨機數,直到達到 numValue,然后它會創建一個新行,並且有指定數量的行。 雖然我放了 3 行,但這段代碼一直在運行無限行。 我肯定錯過了什么。 我是制作方法的新手,這是我自己第一次嘗試。

此方法將無休止地求助,因為它在返回時無條件調用printNumbers(7,3) 從外觀上看,您似乎甚至不需要返回值 - 將返回類型更改為void ,刪除return語句,您應該沒問題:

public static void printNumbers(int numValue, int rows){
    for (int i = 0; i < rows; i++) {
         int x = (int)(Math.random() * 10);
         System.out.print(x);
         if (numValue == x && i < rows) {
             System.out.println(" ");
         } else if (i < rows) {
           System.out.print(x);
         }
    }
}

每個遞歸方法都應該有一個終止條件。 我更新了相同的程序以正常工作,並在隨機數達到 numValue 時終止程序

public static void main(String[] args) {
    printNumbers(7, 3);
}

public static void printNumbers(int numValue, int rows) {
    for (int i = 0; i < rows; i++) {
        int x = (int) (Math.random() * 10);
        System.out.print(x);
        if (numValue == x && i < rows) {
            System.out.println(" ");
            return;
        } else if (i < rows) {
            System.out.print(x);
        }
    }
    printNumbers(7, 3);
}

//輸出:66003311997

遞歸邏輯中沒有中斷/終止條件,這會導致循環無限期地運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM