Java 数列循环

Java number sequence loop

嗨,我遇到了无限循环问题,我不知道我的代码有什么问题,我正在尝试使数字序列格式位于底部,我认为问题出在我的情况下?

import java.util.Scanner;
public class tester {
    public static void main(String[] args) {
        Scanner x = new Scanner(System.in);


        int n;         

        System.out.print("Enter how many numbers to display");
        n = x.nextInt();


        while(n!=0) {                     //is this right?
            for ( int i = 0; i<=n; i++) {
                if(i%2==0) {
                    n += 2;
                    System.out.print(n);

                } else {
                    n += 3;
                    System.out.print(n);
                }  
            }

        }
    }
}   

我正在尝试获得的输出

Enter how many numbers to display : 5
1 3 6 8 11

2. 
Enter how many numbers to display : 16
1 3 6 8 11 13 16 18 21 23 26 28 31 33 36 38  //but im getting infinite loops

 // the sequence pattern is +2 then +3

问题在这里:while(n!=0) 和这里:for ( int i = 0; i<=n; i++)。对于 while 循环,将一直持续到 n 等于 0。对于 for 循环,这很可能会一直持续下去。

您的代码有两个问题:

  1. 如果您提供一个非负值,这将一直持续下去(因为您总是只递增 n)。
  2. 即使您提供负数,n 也需要 n 正好变为 0 才能停止。

根据您需要执行的操作,您需要更改条件。根据输出判断,n 需要为正数,因此您需要为 n 规定一些上限范围,在该范围内 while 循环将停止。

编辑:你只需要有 1 个循环来做你想做的事。此外,n 表示元素的数量,因此它需要在整个程序执行过程中保持固定。在你的情况下,你一直在增加它。

    Scanner x = new Scanner(System.in);
    int n;
    System.out.print("Enter how many numbers to display");
    n = x.nextInt();

    int count = 0;
    int i = 1;
    while (count < n) {                     //is this right?            
        if (count % 2 == 0) {
            System.out.print(i + " ");
            i += 2;
        } else {
            System.out.print(i + " ");
            i += 3;                
        }            
        count++;
    }

使用'if'条件代替'while'循环

两个问题:

int stop = n; // declare one local var to stop the for loop 

if (n != 0) { //switch to if condition
    for (int i = 0; i <= stop; i++) {  
      //loop's exit condition wasn't met because 'n' was also being incremented
        if (i % 2 == 0) {
            n += 2;
            System.out.print(n+" ");

        } else {
            n += 3;
            System.out.print(n+" ");
        }
    }     
}

您必须将 while-loop 替换为 if-condition,如下所示:

import java.util.Scanner;
public class tester {
    public static void main(String[] args) {

        Scanner x = new Scanner(System.in);        
        int n;         

        System.out.print("Enter how many numbers to display");
        n = x.nextInt();
        int stop = n;

        if(n!=0) { //if statement checks if n!=0
            for ( int i = 0; i<=stop; i++) { 
                  //stop replaces n because n is incremented in your for-loop
                if(i%2==0) {
                    n += 2;
                    System.out.print(n);

                } else {
                    n += 3;
                    System.out.print(n);
                }  
            }
        }

    }
}   

根据您的回答,我找到了一个有效的解决方案:

int n;    

System.out.print("Enter how many numbers to display");
n = x.nextInt();
int k = -2; // so that it starts with 1 when i add +3
int stop = n-1;   

if(n!=0) {                     
    for ( int i = 0; i<=stop; i++) {
        if(i%2==0) {
            k += 3;
            System.out.print(k+" ");
        } else {
            k += 2;
            System.out.print(k+" ");
        }  
    }
}