Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的无限循环问题_Java_For Loop_Infinite Loop - Fatal编程技术网

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)))