可以不在for循环中使用局部变量i吗?

时间:2017-07-26 04:20:04

标签: java for-loop

代码执行正常,但警告仍困扰着我。我使用了我们被指示仅用于循环的变量decNumber

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);


    }

3 个答案:

答案 0 :(得分: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. 中使用它
  3. for循环使内部行为(即rem)不会流血
  4. for循环实际上用作for而不是while

答案 1 :(得分:2)

你没有添加警告,但我确信这不重要,考虑到你问题的背景。

您必须知道forwhile循环之间的区别。可以找到一个很好的解释here

在您的代码中,您未使用本地变量i来控制循环。您的循环由decNumber>0控制,因此for完全没必要。

更好的方法是使用while

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

答案 2 :(得分: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);
    }
}

这清楚地表明你的循环是如何初始化的,条件是什么使它继续,以及从一次迭代到下一次迭代的变化;因此比使用冗余索引变量更易于阅读。