Java中的无限循环问题
当我在代码底部运行Java中的无限循环问题,java,for-loop,infinite-loop,Java,For Loop,Infinite Loop,当我在代码底部运行for循环时,我得到一个无限循环,每次都在if语句中输出I每次递增,并且不会停止。我很确定这是一个小问题,我只是不能把我的手指 import java.util.Scanner; public class HW2johnson_pp1 { public static void main(String args[]) { Scanner keyboard = new Scanner(System.in); System.ou
for
循环时,我得到一个无限循环,每次都在if
语句中输出I
每次递增,并且不会停止。我很确定这是一个小问题,我只是不能把我的手指
import java.util.Scanner;
public class HW2johnson_pp1 {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
System.out.printf("Please enter the species with the higher" +
" population first\n");
System.out.printf("Enter the name of your first species ");
String Species1 = keyboard.nextLine();
System.out.printf("Enter the species' population: ");
int Pop1 = keyboard.nextInt();
System.out.printf("Enter the species' growth rate: ");
int Growth1 = keyboard.nextInt();
System.out.printf("Enter the name of your second species: ");
String Species2 = keyboard.nextLine();
System.out.printf("Enter the species' population: ");
int Pop2 = keyboard.nextInt();
System.out.printf("Enter the species' growth rate: ");
int Growth2 = keyboard.nextInt();
if (Pop2 > Pop1) {
System.out.printf("The first population must be higher. \n");
System.exit(0);
}
Species input1 = new Species();
input1.name = Species1;
input1.population = Pop1;
input1.growthRate = Growth1;
Species input2 = new Species();
input2.name = Species2;
input2.population = Pop2;
input2.growthRate = Growth2;
if ((input1.predictPopulation(1) - input2.predictPopulation(1)) <=
(input1.predictPopulation(2) - input2.predictPopulation(2))){
System.out.printf(Species2 + " will never out-populate " +
Species1 + "\n");
}
else {
for (int i = 0; input2.predictPopulation(i) <=
input1.predictPopulation(i); i++) {
if (input2.predictPopulation(i) == input1.predictPopulation(i)) {
System.out.printf(" will out-populate \n");
}
}
}
}
}
你的问题在这里
for(int i=0;input2.predictPopulation(i)input1)
类本身存在一些问题,迫使input1始终等于或大于input2
编辑:因为你已经发布了predictPopulation的代码,所以看起来它是第一位的。确保输入2的增长率始终大于输入1 您的问题就在这里
for(int i=0;input2.predictPopulation(i)input1)
类本身存在一些问题,迫使input1始终等于或大于input2
编辑:因为你已经发布了predictPopulation的代码,所以看起来它是第一位的。确保输入2的增长率始终大于输入1 这是:
if (Pop2 > Pop1) {
Species2 = Species1;
Pop2 = Pop1;
Growth1 = Growth2;
}
没有道理。显然,您的目的是“交换”两个总体的值,但相反,您只是使两个总体相同,因此对于年
的任何值,预测总体(年)
对于两个对象都是相同的
编辑以添加:此测试:
if ((input1.predictPopulation(1) - input2.predictPopulation(1)) <
(input1.predictPopulation(2) - input2.predictPopulation(2)))
if((input1.predictPopulation(1)-input2.predictPopulation(1))<
(输入1.predictPopulation(2)-输入2.predictPopulation(2)))
这不是判断物种2是否最终会超过物种1的有效方法。如果物种2具有更大的比例增长率(growthRate
),那么它最终将超过物种1,即使在最初几年中,它的绝对增长率较低。(这只与无限循环相关-指出如果您有以下内容,您就不会有无限循环:
没有意义。显然,您的目的是“交换”两个总体的值,但相反,您只是使两个总体相同,以便对于年
的任何值,预测总体(年)
对于两个对象都是相同的
编辑以添加:此测试:
if ((input1.predictPopulation(1) - input2.predictPopulation(1)) <
(input1.predictPopulation(2) - input2.predictPopulation(2)))
if((input1.predictPopulation(1)-input2.predictPopulation(1))<
(输入1.predictPopulation(2)-输入2.predictPopulation(2)))
不是判断物种2是否最终会超过物种1的有效方法。如果物种2的比例增长率更高(growthRate
),那么它最终会超过物种1,即使在最初几年中,它的绝对增长率更低。(这只与无限循环相关——指出如果你没有展示predictPopulation()
的功能,那么你就不会有无限循环,因为你没有展示predictPopulation()的定义。)
。可以说的是,input2.predictPopulation(i)
从来没有超过input1.predictPopulation(i)
。抱歉,伙计们,我在发布这篇文章时被转移了。predictPopulation()现在,我建议您在调试器中逐步检查您的程序以了解发生了什么。如果您没有显示predictPopulation()
的功能,则无法回答此问题。这是不可能回答的,因为您没有显示predictPopulation()的定义
。可以说的是,input2.predictPopulation(i)
绝对不会超过input1.predictPopulation(i)
。抱歉,伙计们,我在发布这篇文章时被转移了。predictPopulation()现在就在上面。我建议你在调试器中逐步检查你的程序,看看发生了什么。还有如果((input1.predictPopulation(1)-input2.predictPopulation(1))<(input1.predictPopulation(2)-input2.predictPopulation(2)))需要一个@Dampsquid:很好,谢谢。我已经在答案中添加了这个。@Dampsquid:事实上,经过再三考虑……它比那个更复杂。目前的测试通常是错误的,不仅仅是使用,你确定吗?因为人口每年都在增加。@ruakh:嗯,非常正确,这个家庭作业需要更多的思考布特,很高兴它不是我的(谢天谢地,几十年前就完成了家庭作业)如果((input1.predictPopulation(1)-input2.predictPopulation(1))<(input1.predictPopulation(2)-input2.predictPopulation(2)))需要一个@Dampsquid:很好,谢谢。我已经在答案中添加了这个。@Dampsquid:事实上,经过再三考虑……它比那个更复杂。目前的测试通常是错误的,不仅仅是使用,你确定吗?因为人口每年都在增加。@ruakh:嗯,非常正确,这个家庭作业需要更多的思考布特,很高兴不是我的(谢天谢地,几十年前就完成了家庭作业)
if ((input1.predictPopulation(1) - input2.predictPopulation(1)) <
(input1.predictPopulation(2) - input2.predictPopulation(2)))