Java Double.parseDouble()中的NumberFormatException
我试图创建一个客户机/服务器应用程序,服务器要求客户机写入两个操作数,然后选择一个操作。当客户机选择操作时,服务器将结果发送给他 当我想运行我的程序时,我遇到了以下错误:Java Double.parseDouble()中的NumberFormatException,java,numberformatexception,Java,Numberformatexception,我试图创建一个客户机/服务器应用程序,服务器要求客户机写入两个操作数,然后选择一个操作。当客户机选择操作时,服务器将结果发送给他 当我想运行我的程序时,我遇到了以下错误: Exception in thread "main" java.lang.NumberFormatException: For input string: "1lient connectée" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecima
Exception in thread "main" java.lang.NumberFormatException: For input string: "1lient connectée"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.parseDouble(Double.java:540)
at Server.main(Server.java:29)
这是我的代码:
*服务器:*
客户端:
import java.net.*;
import java.util.*;
import java.io.*;
public class Client {
public static void main (String[] args) throws UnknownHostException{
DatagramSocket s;
byte[] sendBuffer = new byte[1024];
byte[] recvBuffer = new byte[1024];
DatagramPacket sendPacket, recvPacket;
String reply = null;
final InetAddress ADRSS = InetAddress.getByName("localhost");
final int PORT = 1234;
Scanner cn = new Scanner(System.in);
try{
s = new DatagramSocket();
//Declare connection to server
sendBuffer = "Client connectée".getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the first message from server
recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
//Send the answer for the first Message to server (first operand)
sendBuffer = cn.nextLine().getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the second message from server
recvPacket = new DatagramPacket(recvBuffer,recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
//Send the answer for the second Message to server (second operand)
sendBuffer = cn.nextLine().getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the third message from server
recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
//Send the answer for the third Message to server (operation)
sendBuffer = cn.nextLine().getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the result from server (result of operation)
recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
}catch(IOException e){
e.printStackTrace();
}
}
}
double n1=double.parseDouble(新字符串(recvPacket.getData())代码>
这一行导致了错误,因为您正在从客户端发送字符串,并且在服务器上需要双精度。变量n2也可能面临同样的问题。所以,只要将它们视为字符串,就可以了。对于测试,我试图从客户端发送数字1,然后我收到了这个错误,我从客户端发送到服务器的第一条消息是字符串,它可以工作,但是,当我发送第二条消息时,它必须是一个数字,我从错误消息中得到,我试图发送这个字符串:1lient connectée
,似乎sendPacket保留了旧消息,然后旧消息中的第一个字母被替换为我试图发送的数字,我不想显得卑鄙或陈腐,但我强烈建议您多练习一点调试。首先,您得到的异常应该直接引导您到这一行,查看并找到异常和代码之间的链接,以便您下次可以这样做,java异常是很棒的故障排除工具!其次,在解析新字符串之前,将其记录到控制台或文件中——您的问题应该很快就会显现出来。您可能还希望将“1”、“1.0”和“1Client”传递给parseDouble,并查看它们的作用。异常名称在这里是不言自明的,与客户端、服务器或UDP无关。
import java.net.*;
import java.util.*;
import java.io.*;
public class Client {
public static void main (String[] args) throws UnknownHostException{
DatagramSocket s;
byte[] sendBuffer = new byte[1024];
byte[] recvBuffer = new byte[1024];
DatagramPacket sendPacket, recvPacket;
String reply = null;
final InetAddress ADRSS = InetAddress.getByName("localhost");
final int PORT = 1234;
Scanner cn = new Scanner(System.in);
try{
s = new DatagramSocket();
//Declare connection to server
sendBuffer = "Client connectée".getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the first message from server
recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
//Send the answer for the first Message to server (first operand)
sendBuffer = cn.nextLine().getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the second message from server
recvPacket = new DatagramPacket(recvBuffer,recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
//Send the answer for the second Message to server (second operand)
sendBuffer = cn.nextLine().getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the third message from server
recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
//Send the answer for the third Message to server (operation)
sendBuffer = cn.nextLine().getBytes();
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, ADRSS, PORT);
s.send(sendPacket);
//Receive the result from server (result of operation)
recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
s.receive(recvPacket);
System.out.println(new String(recvPacket.getData()));
}catch(IOException e){
e.printStackTrace();
}
}
}