2017-07-26 64 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); 
    } 
} 

这清楚你的循环是如何初始化,条件是什么,使得它继续下去,什么从一个迭代到下一个改变;因此比使用冗余索引变量更好。