【问题标题】:Java number sequence loopJava数字序列循环
【发布时间】:2015-09-25 12:58:03
【问题描述】:

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

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

【问题讨论】:

    标签: java for-loop infinite-loop


    【解决方案1】:

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

    你的代码有两个问题:

    1. 如果您提供一个非负值,这将一直持续下去(因为您始终只增加 n)。
    2. 即使您确实提供了一个负数,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++;
        }
    

    【讨论】:

      【解决方案2】:

      两个问题:

      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+" ");
              }
          }     
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 仍然给出一个无限循环,我认为这是我在 if else 语句中的条件?
        • Ya wright,你正在改变循环中的'n'值,这也是无限循环的原因。
        • 在 'for' 循环中,'i' 递增 1 步,同时 'n' 递增 2 或 3 步。最好使用另一个局部变量而不是更改“n”值。
        【解决方案4】:

        您必须将您的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);
                        }  
                    }
                }
        
            }
        }   
        

        【讨论】:

        • 仍然是无限循环
        • 你是否也改变了for循环?它不应该无限循环
        【解决方案5】:

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

        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+" ");
                }  
            }
        }
        

        【讨论】:

        • 虽然将您的最终解决方案作为答案发布很有帮助,但请务必将其他答案之一标记为已接受,无论哪个答案最能帮助您找到您的解决方案。
        • 那么请投赞成票:D 我的回答也应该摆脱无限循环...
        猜你喜欢
        • 1970-01-01
        • 2015-08-28
        • 2015-08-20
        • 2017-03-21
        • 1970-01-01
        • 2018-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多