代码执行正常,但警告仍困扰着我。我使用了我们被指示仅用于循环的变量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);
}
答案 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();
}
}
这里的优点是
decNumber
变量,因此稍后仍可在for
循环使内部行为(即rem
)不会流血for
循环实际上用作for而不是while
答案 1 :(得分:2)
你没有添加警告,但我确信这不重要,考虑到你问题的背景。
您必须知道for
和while
循环之间的区别。可以找到一个很好的解释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);
}
}
这清楚地表明你的循环是如何初始化的,条件是什么使它继续,以及从一次迭代到下一次迭代的变化;因此比使用冗余索引变量更易于阅读。