为什么代码无法访问?
Why is the code not reachable?
以下是 'out.close();' 上的 "code unreachable" 消息
我找不到问题,因为它或多或少与我的其他代码相同 运行 有效!
import java.io.*;
import java.net.*;
public class MyClient {
private static String SERVER = "127.0.0.1";
private static Integer PORT = 8765;
public static void main(String[] args) throws IOException {
// Connect to the server and create the writer and reader
Socket socket = new Socket(SERVER,PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Loop forever
while(true) {
out.println("Question:");
String sum = System.console().readLine();
out.println(sum);
String line = in.readLine().trim();
if(line==null || line.startsWith("Finished")) {
socket.close();
return;
}
else if (line.startsWith("My answer is: ")){
System.out.println(line);
String message = System.console().readLine();//correct or wrong!!
out.println(message);
}
}
// Close the in and out and socket
out.close();
in.close();
socket.close();
}
}
您正在 while
循环中执行 return
。您应该改为 break
。
问题来了
// Loop forever
while(true) {
它将永远循环,你永远不会停止它,所以循环后的下一行将永远不会执行。就是这样:P
因为您有一个无限循环 (while(true)
),没有中断或其他退出方式。
在循环中执行 return
不是一个好的风格,但如果想确保释放资源,你可以用 try ... finally
:
包装你的循环
try {
while(true) {
// ...
if(condition) {
return;
}
// ...
}
} finally {
out.close(); // this is called just before leaving the surrounding function
// ...
}
即使在循环中抛出异常也能正常工作。
因为代码永远不会到达:
// Close the in and out and socket
out.close();
in.close();
socket.close();
将return
改为break
:
if(line==null || line.startsWith("Finished")) {
socket.close();
break; //<------------------CHANGE
}
以下是 'out.close();' 上的 "code unreachable" 消息 我找不到问题,因为它或多或少与我的其他代码相同 运行 有效!
import java.io.*;
import java.net.*;
public class MyClient {
private static String SERVER = "127.0.0.1";
private static Integer PORT = 8765;
public static void main(String[] args) throws IOException {
// Connect to the server and create the writer and reader
Socket socket = new Socket(SERVER,PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Loop forever
while(true) {
out.println("Question:");
String sum = System.console().readLine();
out.println(sum);
String line = in.readLine().trim();
if(line==null || line.startsWith("Finished")) {
socket.close();
return;
}
else if (line.startsWith("My answer is: ")){
System.out.println(line);
String message = System.console().readLine();//correct or wrong!!
out.println(message);
}
}
// Close the in and out and socket
out.close();
in.close();
socket.close();
}
}
您正在 while
循环中执行 return
。您应该改为 break
。
问题来了
// Loop forever
while(true) {
它将永远循环,你永远不会停止它,所以循环后的下一行将永远不会执行。就是这样:P
因为您有一个无限循环 (while(true)
),没有中断或其他退出方式。
在循环中执行 return
不是一个好的风格,但如果想确保释放资源,你可以用 try ... finally
:
try {
while(true) {
// ...
if(condition) {
return;
}
// ...
}
} finally {
out.close(); // this is called just before leaving the surrounding function
// ...
}
即使在循环中抛出异常也能正常工作。
因为代码永远不会到达:
// Close the in and out and socket
out.close();
in.close();
socket.close();
将return
改为break
:
if(line==null || line.startsWith("Finished")) {
socket.close();
break; //<------------------CHANGE
}