Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Double.parseDouble()中的NumberFormatException_Java_Numberformatexception - Fatal编程技术网

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();
        }
    }

}