如何解决这段代码无限运行,我不知道为什么它不起作用
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 举报,一经查实,本站将立刻删除。