我正在尝试在此类中调用静态方法(printABC()
),但它无效。
如果我取消注释标记为T_T(1和2)的两条线,它就可以了!为什么只有一条线路失败?
import java.util.Scanner;
class pro0009 {
static Scanner in = new Scanner(System.in);
static int A,B,C;
static void printABC(){
String ABC = in.nextLine();
ABC=ABC.replace("A"," "+A+" ");
ABC=ABC.replace("B"," "+B+" ");
ABC=ABC.replace("C"," "+C+" ");
//System.out.print(ABC.substring(1));
System.out.print(ABC);
}
public static void main(String[] args){
int x = in.nextInt(); //1
int y = in.nextInt(); //2
int z = in.nextInt(); //3
if(x<y){//1<2
if(x<z){ //1<3
if(y<z){//x<y<z 2<3
//1<2<3
A=x;
B=y;
C=z;
printABC();//T_T 1
System.out.println("Here");
//pro0009.printABC();//T_T 2
//System.out.println("Here2");
}else{ //x<z<y
A=x;
B=z;
C=y;
}
}else{//z<x<y
A=z;
B=x;
C=y;
}
}else{//y<x
if(y<z){
if(x<z){//y<x<z
A=y;
B=x;
C=z;
}else{//y<z<x
A=y;
B=z;
C=x;
}
}else{//z<y<x
A=z;
B=y;
C=x;
}
}
}
}
答案 0 :(得分:1)
T_T 1消耗输入的行。 in.nextLine()在T_T 2的缓冲区中没有任何内容,因此它正在等待输入。
答案 1 :(得分:0)
因为您在另一个静态方法中调用静态方法,所以这不应该导致问题。问题应该在于程序的逻辑。请提供有关您尝试实施的功能的更多详细信息。
答案 2 :(得分:0)
程序开头的三个nextInt
不会吃行终止符。第一次调用nextLine
时,它会读取此终结符的输入并返回空字符串。所以第一个printABC
也打印出空字符串。当第二次调用nextLine
时,它会读取输入中的下一行,这是您所期望的。
要解决此问题,您只需在nextLine
中拨打printABC
两次,忽略第一次通话的结果,因为它应该始终为空。