Java客户端/服务端程序:整数转String实现斐波那契结果返回问题
解决Java Socket服务端斐波那契计算中的类型转换与逻辑问题
问题核心
需要将客户端输入的数值字符串转换为int类型传入斐波那契计算方法,同时修正斐波那契逻辑以匹配预期结果(输入2返回3),并处理字符串转换中的异常情况。
修正后的服务端代码
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; public class ServerData { // 调整斐波那契逻辑以匹配预期:输入n返回对应规则的结果(如输入2返回3) public static int fibonacci(int n) { int v1 = 1, v2 = 2, v3 = 0; if (n == 0) return 1; if (n == 1) return 2; for(int i = 2; i <= n; i++) { v3 = v1 + v2; v1 = v2; v2 = v3; } return v3; } public static void main(String[] args) { ServerSocket server = null; boolean shutdown = false; try { server = new ServerSocket(1236); System.out.println("Port bound. Accepting connection"); } catch(IOException e) { e.printStackTrace(); System.exit(-1); } while(!shutdown) { Socket client = null; InputStream input = null; OutputStream output = null; try { client = server.accept(); input = client.getInputStream(); output = client.getOutputStream(); // 读取客户端发送的内容长度与数据 int dataLen = input.read(); byte[] data = new byte[dataLen]; input.read(data); // 处理输入字符串:去除换行符并修剪空白(String不可变,需重新赋值) String clientInput = new String(data, StandardCharsets.UTF_8).replace("\n", "").trim(); System.out.println("Client said: " + clientInput); String response; if (clientInput.equalsIgnoreCase("shutdown")) { response = "Shutting down server..."; shutdown = true; } else { try { // 将字符串转换为int并计算斐波那契结果 int num = Integer.parseInt(clientInput); int fibResult = fibonacci(num); response = String.format("Fibonacci result for input %d is: %d", num, fibResult); } catch (NumberFormatException e) { // 处理非数字输入的异常情况 response = "Error: Please input a valid integer number"; } } // 发送响应给客户端 output.write(response.length()); output.write(response.getBytes(StandardCharsets.UTF_8)); client.close(); if(shutdown) { System.out.println("shutting down..."); } } catch (IOException e) { e.printStackTrace(); continue; } } } }
修正后的客户端代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.StandardCharsets; public class ClientData { public static void main(String[] args) { System.out.print("Input a number for Fibonacci calculation (or 'shutdown' to stop server): "); BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); try { String userString = userInput.readLine(); Socket connection = new Socket("127.0.0.1", 1236); InputStream input = connection.getInputStream(); OutputStream output = connection.getOutputStream(); // 发送输入内容给服务端 output.write(userString.length()); output.write(userString.getBytes(StandardCharsets.UTF_8)); // 读取服务端响应 int responseLen = input.read(); byte[] responseData = new byte[responseLen]; input.read(responseData); String serverResponse = new String(responseData, StandardCharsets.UTF_8); System.out.println("Server said: " + serverResponse); connection.close(); } catch (IOException e ) { e.printStackTrace(); } } }
关键修正说明
- 类型转换处理:用
Integer.parseInt()实现字符串转int,添加NumberFormatException捕获非数字输入的异常,避免程序崩溃。 - 斐波那契逻辑调整:修改初始值为
v1=1, v2=2,确保输入2时返回3,匹配你指定的序列规则。 - 字符串处理:由于
String是不可变类型,必须将replace()的结果重新赋值给变量,同时用trim()处理输入前后的空白字符。 - 异常友好提示:对非数字输入返回明确错误信息,提升交互体验。
内容的提问来源于stack exchange,提问作者John Hendricks
相关产品推荐
相关产品推荐

