是否可以不使用局部变量我在for循环?
问题描述:
该代码执行得很好,但警告仍然困扰着我。我已经使用了可变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);
}
答
这将是一个有点更洁净:
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
循环保持内部行为r(即rem
)渗出 - 的
for
环路实际使用类似的,而不是while
答
您没有添加警告,但我相信,没关系,考虑你的问题的情况下。
您必须知道for
和while
循环之间的差异。一个很好的解释可以找到here。
在你的代码中,你没有使用本地变量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);
}
}
这清楚你的循环是如何初始化,条件是什么,使得它继续下去,什么从一个迭代到下一个改变;因此比使用冗余索引变量更好。
你是否假设我们都可以看到你的屏幕? _什么警告? – ajb
当然,但是'while-loop'或'do-while'循环会更好吗? – MadProgrammer
对不起。我是新来的。忘了提及警告的地方。它在for循环中的条件表达式中找到。它说:“局部变量i的值没有被使用,我只是想知道是否可以忽略它 – Lana