簡體   English   中英

Java:如何讓while循環只輸出最后一行

[英]Java: How to get while loop to only output last line

剛剛開始學習Java,所以這讓我卡住了很長一段時間。 這是一個輸出斐波那契數列數字的程序。 這里的目標是讓程序只輸出 while 循環的最后一行。 我已經啟動並運行了程序,只是在試圖弄清楚如何只輸出序列的最后一行時遇到了麻煩

示例輸入/輸出輸入:5

輸出:Fibonacci #3 是:3 Fibonacci #4 是:5 Fibonacci #5 是:8

輸出應如下所示:Fibonacci #5 is: 8

import javax.swing.JOptionPane;

public class Fibonacci2 {

    public static void main(String args[ ]) {

       int n, 
           counter = 2, 
           sum,    
           prevN, 
           nextN; 

       String inputValue;

       inputValue = JOptionPane.showInputDialog(null, "Enter Number Greater than 2: ",
                              JOptionPane.QUESTION_MESSAGE);
       n = Integer.parseInt(inputValue);

       if (n >= 2)

       counter = 2; 
       prevN = 1;
       nextN = 2;

       if (n < 2) 
       System.out.println("Invalid Input. Please Try Again.");


       while (counter < n)
       {
           sum = prevN + nextN;
           prevN = nextN;
           nextN = sum; 
           counter++;

           System.out.println("Fibonacci #"+counter+" is: " + sum); 

       }

       System.exit(0);

    } 

} 

你的問題的簡單答案是,移動System.out.println("Fibonacci #" + counter + " is: " + sum); while-loop上下文之外的語句...

while (counter < n) {
    sum = prevN + nextN;
    prevN = nextN;
    nextN = sum;
    counter++;
}

System.out.println("Fibonacci #" + counter + " is: " + sum);

我試過了,它給了我這個: Fibonacci2.java:62: 錯誤:變量 sum 可能沒有被初始化 System.out.println("Fibonacci #"+counter+" is: " + sum); ^

與實例字段不同的是,局部變量在創建的時候並沒有被賦予默認值,所以如果代碼的路徑不能保證會被設置,就需要保證該值有默認值...

int n,
        counter = 2,
        sum = 0,
        prevN,
        nextN;

此外,您的if語句值得關注......

if (n >= 2)

counter = 2; 
prevN = 1;
nextN = 2;

if (n < 2) 
System.out.println("Invalid Input. Please Try Again.");

基本上這句話是...

  • 如果n大於或等於2 ,則counter等於2
  • prevN等於1
  • nextN等於2
  • 如果n小於2則打印錯誤消息
  • 繼續運行循環

對我來說,這沒有多大意義並且難以閱讀。 相反,您應該在其自己的執行上下文中(即,在{...}大括號之間)包含應該為每個分支執行的代碼,例如...

if (n >= 2) {
    counter = 2;
    prevN = 1;
    nextN = 2;

    while (counter < n) {
        sum = prevN + nextN;
        prevN = nextN;
        nextN = sum;
        counter++;
    }

    System.out.println("Fibonacci #" + counter + " is: " + sum);
} else {
    System.out.println("Invalid Input. Please Try Again.");
}

這使代碼更易於閱讀和理解 - 但我頭腦簡單😉

把它放在循環外

while (counter < n){
sum = prevN + nextN;
prevN = nextN;
nextN = sum; 
counter++; 
}
System.out.println("Fibonacci #"+counter+" is: " + sum);
}

您唯一需要做的就是將 System.out.println("Fibonacci #"+counter+" is: " + sum) 移出循環,這樣它只會打印最后一個數字; 像這樣:

while (counter < n)
   {
   sum = prevN + nextN;
   prevN = nextN;
   nextN = sum; 
   counter++;
   }
System.out.println("Fibonacci #"+counter+" is: " + sum);

我為我的 EGR 課程做了一個類似的程序; 它的目標是輸出給定位置的數字(序列從 1 開始),即 p1=1、p2=1、p3=2、p4=3、p5=5、p6=8 等。

import java.util.Scanner;

public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);

System.out.println("Enter the Fibonacci Number's position.");
long n=keyboard.nextLong();
long sum, prevN=1, nextN=0, counter=1, last=0, lastnum;


    while (counter <= n) {
        sum = prevN + nextN;
        prevN = nextN;
        nextN = sum;
        if (n == counter)
        {
             System.out.println("Fibonacci #" + counter + " is: " + sum);
        }
        counter++;      
    }
    
    

}}

我知道 OP 已經晚了,但對於任何其他尋求幫助的學生/愛好者來說,這是我的兩分錢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM