我一直在尝试学习Java,但在变量初始化方面遇到了障碍。在这两个示例中,程序从键盘获取输入,按升序对值进行排序,然后打印结果。这两个程序都可以编译并正常运行,但其中一个需要对变量进行初始化,而另一个则不需要。
在这个示例中,我没有初始化任何内容,但程序仍能编译通过且没有错误。
int num1, num2, num3, temp; // DIDN'T INITIALIZE
Scanner input = new Scanner(System.in);
System.out.print("Enter an integer: ");
num1 = input.nextInt();
System.out.print("Enter an integer");
num2 = input.nextInt();
System.out.print("Enter an integer: ");
num3 = input.nextInt();
if (num1 > num2) {temp = num1; num1 = num2; num2 = temp;}
if (num2 > num3) {temp = num2; num2 = num3; num3 = temp;}
if (num1 > num2) {temp = num1;num1 = num2; num2 = temp;}
System.out.println(num1 + " " + num2 + " " + num3 );
然而,在这个例子中,如果我不从一开始初始化变量,就会出现错误,提示“java variables might not have been initialized.”
int num1=0 , num2=0, num3=0, temp, i=0; // MUST INITIALIZE VARIABLES!!
Scanner input = new Scanner(System.in);
while (i < 3) {
System.out.print("Enter an integer: ");
while(true){
while (!input.hasNextInt()) {
System.out.print("Not an integer!! Please enter an integer: ");
input.next();
}
if (i < 1) {num1 = input.nextInt();break;}
if (i < 2) {num2 = input.nextInt();break;}
if (i < 3) {num3 = input.nextInt();break;}
}
i++;
}
if (num1 > num2) {temp = num1; num1 = num2; num2 = temp;}
if (num2 > num3) {temp = num2; num2 = num3; num3 = temp;}
if (num1 > num2) {temp = num1;num1 = num2; num2 = temp;}
System.out.println(num1 + " " + num2 + " " + num3 );
这两个程序唯一的区别在于第二个程序使用 while 循环来检查用户输入,但除此之外,它们分配值的方法和排序方式都是相同的。
final
。 - Thilo