Java BufferedReader.readLine() 跳过了一行
Java BufferedReader.readLine() Skipped One Line
我正在尝试制作一些分布式 java RMI 程序,当我需要从用户那里获取输入时遇到了问题。在下面的代码片段中,输入 1
似乎不错,但是第一次输入 2
没有打印任何东西,当我再次输入 2
时,它起作用了。
这是怎么发生的?检查了 BufferedReader.readLine()
函数文档,但没有发现任何与此相关的内容。这跟else if
有关系吗?
import java.io.*;
public class test {
private static BufferedReader lineOfText = new BufferedReader(new InputStreamReader(System.in));
public test() throws NumberFormatException, IOException {
System.out.println("1 to create an auction, 2 to close an auction");
if (Integer.parseInt(lineOfText.readLine()) == 1) {
System.out.println("1 recieved");
} else if (Integer.parseInt(lineOfText.readLine()) == 2) {
System.out.println("2 recieved");
} else {
return;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
test t = new test();
}
}
输入1
:
1 to create an auction, 2 to close an auction
1 //<- that's the input
1 recieved
输入2
:
1 to create an auction, 2 to close an auction
2 //<- that's the input yet nothing happened
2 //<- input again
2 recieved
还在一些在线编译器上尝试了代码片段,结果与我的相同VSCode。这可能是一个简单的问题,但我不知道发生了什么;\
因为您在“if”和“else-if”中都调用了“readline()”,所以它会在每次尝试检查条件时调用 readline() 两次:一次当它 运行 是“if”条件,然后是 运行 else-if 时的第二次。当您在条件语句中放置一个函数时,例如:
if(myFunction() == true){}
在将其 return 值与条件进行比较之前,它将始终 运行 该函数。所以当你有:
if (Integer.parseInt(lineOfText.readLine()) == 1) {
System.out.println("1 recieved");
} else if (Integer.parseInt(lineOfText.readLine()) == 2) {
System.out.println("2 recieved");
} else {
return;
}
它会在检查“if”和“else-if”时再次调用 readLine()。
您应该在开始根据条件检查它之前调用 readline 以确保它只有 运行 一次:
import java.io.*;
public class test {
private static BufferedReader lineOfText = new BufferedReader(new InputStreamReader(System.in));
public test() throws NumberFormatException, IOException {
System.out.println("1 to create an auction, 2 to close an auction");
String myLine = lineOfText.readLine(); //call readLine() before checking conditions so it only runs once
if (Integer.parseInt(myLine) == 1) {
System.out.println("1 recieved");
} else if (Integer.parseInt(myLine) == 2) {
System.out.println("2 recieved");
} else {
return;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
test t = new test();
}
}
当你输入 2
时,第一个 if 语句读取的数字当然不等于 1
,那么下一个 if 语句将不会为你提供最后一个输入 2
您需要将 readLine()
放在 if 之外,使其只读一次。
public class test {
private static BufferedReader lineOfText = new BufferedReader(new InputStreamReader(System.in));
public test() throws NumberFormatException, IOException {
System.out.println("1 to create an auction, 2 to close an auction");
int choice = Integer.parseInt(lineOfText.readLine());
if (choice == 1) {
System.out.println("1 recieved");
} else if (choice == 2) {
System.out.println("2 recieved");
} else {
return;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
test t = new test();
}
}
我正在尝试制作一些分布式 java RMI 程序,当我需要从用户那里获取输入时遇到了问题。在下面的代码片段中,输入 1
似乎不错,但是第一次输入 2
没有打印任何东西,当我再次输入 2
时,它起作用了。
这是怎么发生的?检查了 BufferedReader.readLine()
函数文档,但没有发现任何与此相关的内容。这跟else if
有关系吗?
import java.io.*;
public class test {
private static BufferedReader lineOfText = new BufferedReader(new InputStreamReader(System.in));
public test() throws NumberFormatException, IOException {
System.out.println("1 to create an auction, 2 to close an auction");
if (Integer.parseInt(lineOfText.readLine()) == 1) {
System.out.println("1 recieved");
} else if (Integer.parseInt(lineOfText.readLine()) == 2) {
System.out.println("2 recieved");
} else {
return;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
test t = new test();
}
}
输入1
:
1 to create an auction, 2 to close an auction
1 //<- that's the input
1 recieved
输入2
:
1 to create an auction, 2 to close an auction
2 //<- that's the input yet nothing happened
2 //<- input again
2 recieved
还在一些在线编译器上尝试了代码片段,结果与我的相同VSCode。这可能是一个简单的问题,但我不知道发生了什么;\
因为您在“if”和“else-if”中都调用了“readline()”,所以它会在每次尝试检查条件时调用 readline() 两次:一次当它 运行 是“if”条件,然后是 运行 else-if 时的第二次。当您在条件语句中放置一个函数时,例如:
if(myFunction() == true){}
在将其 return 值与条件进行比较之前,它将始终 运行 该函数。所以当你有:
if (Integer.parseInt(lineOfText.readLine()) == 1) {
System.out.println("1 recieved");
} else if (Integer.parseInt(lineOfText.readLine()) == 2) {
System.out.println("2 recieved");
} else {
return;
}
它会在检查“if”和“else-if”时再次调用 readLine()。
您应该在开始根据条件检查它之前调用 readline 以确保它只有 运行 一次:
import java.io.*;
public class test {
private static BufferedReader lineOfText = new BufferedReader(new InputStreamReader(System.in));
public test() throws NumberFormatException, IOException {
System.out.println("1 to create an auction, 2 to close an auction");
String myLine = lineOfText.readLine(); //call readLine() before checking conditions so it only runs once
if (Integer.parseInt(myLine) == 1) {
System.out.println("1 recieved");
} else if (Integer.parseInt(myLine) == 2) {
System.out.println("2 recieved");
} else {
return;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
test t = new test();
}
}
当你输入 2
时,第一个 if 语句读取的数字当然不等于 1
,那么下一个 if 语句将不会为你提供最后一个输入 2
您需要将 readLine()
放在 if 之外,使其只读一次。
public class test {
private static BufferedReader lineOfText = new BufferedReader(new InputStreamReader(System.in));
public test() throws NumberFormatException, IOException {
System.out.println("1 to create an auction, 2 to close an auction");
int choice = Integer.parseInt(lineOfText.readLine());
if (choice == 1) {
System.out.println("1 recieved");
} else if (choice == 2) {
System.out.println("2 recieved");
} else {
return;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
test t = new test();
}
}