2017-07-26 65 views
0

該代碼執行得很好,但警告仍然困擾着我。我已經使用了可變decNumber我們被告知只能使用for循環是否可以不使用局部變量我在for循環?

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner in = new Scanner(System.in); 

    int decNumber,rem=0; 

    System.out.print("Enter a decimal number: "); 
    decNumber = in.nextInt(); 

    for(int i=0;decNumber>0;i++) { 


       rem = (decNumber%2); 
       decNumber = (decNumber/2); 
       System.out.println(rem); 


    } 
+4

你是否假設我們都可以看到你的屏幕? _什麼警告? – ajb

+0

當然,但是'while-loop'或'do-while'循環會更好嗎? – MadProgrammer

+0

對不起。我是新來的。忘了提及警告的地方。它在for循環中的條件表達式中找到。它說:「局部變量i的值沒有被使用,我只是想知道是否可以忽略它 – Lana

回答

6

這將是一個有點更潔淨:

import java.util.Scanner; 

public class Main { 

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

     System.out.print("Enter a decimal number: "); 
     int decNumber = in.nextInt(); 

     for (int i = decNumber; i > 0; i = i/2) { 
      int rem = (i % 2); 
      System.out.println(rem); 
     } 

     in.close(); 
    } 
} 

的位置優勢

  1. 你不破壞decNumber變量,所以它仍然可以在以後使用
  2. for循環保持內部行爲r(即rem)滲出
  3. for環路實際使用類似的,而不是while
2

您沒有添加警告,但我相信,沒關係,考慮你的問題的情況下。

您必須知道forwhile循環之間的差異。一個很好的解釋可以找到here

在你的代碼中,你沒有使用本地變量i來控制你的循環。你的循環由decNumber>0控制,所以for在這裏完全沒有必要。

一個更好的辦法是使用while

while (decNumber > 0) { 
    rem = (decNumber%2); 
    decNumber = (decNumber/2); 
    System.out.println(rem); 
} 
+0

是的,這也是我的想法,但自從我的老師想要我們用循環,也許我會找到另一種方式,我謝謝你! – Lana

+0

@Lana檢查丹尼爾的答案[這裏](https://stackoverflow.com/a/45317466/1160699) – Junaid

2

在你的代碼,你不使用i在所有。實際上,decNumber作爲迭代索引,因爲它是從循環的一次迭代變爲下一次迭代的事情。你在你的代碼執行for循環的全部三個部分的功能線 -

  • 初始化:int decNumber = in.nextInt();
  • 繼續條件:decNumber > 0
  • 增量:decNumber = decNumber/2,你也可以寫爲decNumber /= 2

另請注意,由於您只在循環內部使用rem,所以最好在循環內聲明它,而不是在開始時聲明它。

把所有這些放在一起,你可以保持在for循環的精神,通過重寫你的代碼如下。

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

    System.out.print("Enter a decimal number: "); 
    for(int decNumber = in.nextInt(); decNumber > 0; decNumber /= 2) { 
     int rem = decNumber % 2; 
     System.out.println(rem); 
    } 
} 

這清楚你的循環是如何初始化,條件是什麼,使得它繼續下去,什麼從一個迭代到下一個改變;因此比使用冗餘索引變量更好。