微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这段代码无限运行,我不知道为什么它不起作用

如何解决这段代码无限运行,我不知道为什么它不起作用

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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。