当我运行此代码时,有人可以向我解释一下,直到我输入第一个键盘输入才得到 Sysout 语句?
import java.util.Scanner;
public class test1{
static Scanner scan = new Scanner(System.in);
static int k = scan.nextInt();
public static void main(String[] args) {
setK();
System.out.println(" K is: " + k);
}
public static void setK(){
System.out.println("Please input K value");
k = scan.nextInt();
}
}
在执行main
方法之前初始化test1
类的static
变量。初始化类时会发生这种情况。
因此,
static int k = scan.nextInt();
语句在main
方法之前执行并等待输入。只有在输入输入后,main
才会开始运行并调用setK();
,这会显示"请输入K值"。
我不确定这是故意的,因为您的setK()
方法似乎是应该读取输入并将其分配给 k 的方法。因此,请将代码更改为:
import java.util.Scanner;
public class test1{
static Scanner scan = new Scanner(System.in);
static int k;
public static void main(String[] args) {
setK();
System.out.println(" K is: " + k);
}
public static void setK(){
System.out.println("Please input K value");
k = scan.nextInt();
}
}
此行
static int k = scan.nextInt();
在类初始化期间运行。它阻塞并等待整数的输入。
此代码在main
之前运行,因为它是static
初始化。在调用类的第一个方法之前,它必须完成。此时k
具有您输入的第一个值。之后,main
调用setK
,提示另一个输入。
您可以通过从k
声明中删除初始化(即= scan.nextInt();
部分)来解决此问题。
也许您期望的行为如下:
package test;
import java.util.Scanner;
public class ScannerTest {
static Scanner scan = new Scanner(System.in);
static int k;
public static void main(String[] args) {
System.out.println("Please input K value");
k = scan.nextInt();
System.out.println(" K is: " + k);
}
}
顺便说一句,你应该坚持Java命名约定。