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

Java 不在for循环中使用局部变量i可以吗?,java,for-loop,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: "); de

代码执行得很好,但警告仍然困扰着我。我使用了变量
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);


    }

这会更符合犹太教:

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();
    }
}
这里的优势是

  • 您不会销毁
    decNumber
    变量,因此以后仍可以使用它
  • for
    循环防止内部行为(即
    rem
    )流出
  • for
    循环实际上像for一样使用,而不是
    while

  • 这会更符合犹太教:

    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();
        }
    }
    
    这里的优势是

  • 您不会销毁
    decNumber
    变量,因此以后仍可以使用它
  • for
    循环防止内部行为(即
    rem
    )流出
  • for
    循环实际上像for一样使用,而不是
    while

  • 你们并没有添加警告,但考虑到你们问题的背景,我相信这并不重要

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


    在代码中,您没有使用局部变量
    i
    来控制循环。您的循环由
    decNumber>0
    控制,因此
    for
    在这里完全没有必要

    更好的方法是使用
    while

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

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

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


    在代码中,您没有使用局部变量
    i
    来控制循环。您的循环由
    decNumber>0
    控制,因此
    for
    在这里完全没有必要

    更好的方法是使用
    while

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

    在代码中,您根本没有使用
    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);
        }
    }
    

    这清楚地说明了循环是如何初始化的,使其继续的条件是什么,以及从一个迭代到下一个迭代有什么变化;因此,与使用冗余索引变量相比,它的可读性更好。

    在代码中,您根本没有使用
    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);
        }
    }
    

    这清楚地说明了循环是如何初始化的,使其继续的条件是什么,以及从一个迭代到下一个迭代有什么变化;因此,与使用冗余索引变量相比,它的可读性更好。

    您是否假设我们都可以看到您的屏幕?什么警告?当然,但是
    while循环
    while循环不更好吗?对不起。我是新来的。忘了提到警告的地方了。它可以在for循环的条件表达式中找到。它说“没有使用局部变量i的值。我只是想知道是否可以忽略它。警告说明了一个很好的观点。定义
    i
    有什么意义?如果你认为必须有
    i
    才能有一个循环,那么(1)您可以使用带有空部分的
    for
    循环,因此您可以删除
    int i=0
    i++
    (但不需要分号),以及(2)如果您不需要像
    i
    这样的变量,那么您的循环本质上是
    while
    循环(但我知道您不应该使用一个)。您是否假设我们都可以看到您的屏幕?什么警告?当然,但是
    while循环
    while循环不更好吗?抱歉。我是新来的。忘了提到警告的位置。它位于for循环的条件表达式中。它表示“未使用局部变量i的值”。我只是想知道是否可以忽略它。这个警告很有道理。定义
    i
    有什么意义?如果你认为你必须有一个
    i
    才能有一个循环,那么(1)你可以有一个
    for
    循环和空部分,所以你可以删除
    int i=0
    i++
    (但不是分号),并且(2)如果你不需要像
    i
    这样的变量,那么你的循环本质上就是一个
    循环(但我知道你不应该使用一个)。是的,我也是这么想的,但既然我的导师希望我们使用for loop,也许我会为我找到另一种方法。谢谢!是的,我也是这么想的,但既然我的导师希望我们使用for loop,也许我会为我找到另一种方法。谢谢!