java—这段代码无限期地运行,我不知道它为什么不工作

7hiiyaii  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(358)
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行,但这段代码仍然运行无限行。我一定错过了什么。我对制作方法还很陌生,这是我自己第一次尝试。

kxkpmulp

kxkpmulp1#

此方法将无条件地调用 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);
         }
    }
}
bvuwiixz

bvuwiixz2#

每个递归方法都应该有终止条件。我更新了同一个程序,使其正常工作,当随机数达到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

j8ag8udp

j8ag8udp3#

递归逻辑中没有中断/终止条件,这会导致循环无限期运行。

相关问题