如何将浮点数集成到java服务器计算器中?

如何将浮点数集成到java服务器计算器中?,java,math,client,calculator,server,Java,Math,Client,Calculator,Server,我对Java和Stackoverflow也很陌生。所以,我在Stackoverflow中找到了这段代码。只是改变了一些计算。很抱歉给您带来不便 此服务器可以加、减、乘、除2个整数。它还可以计算整数的正弦、正切和余弦 例如,如果要添加2和3,只需在客户端的控制台中键入add23即可。 如果要查找1的余弦,请在控制台中键入cos1 明天之前我需要答复 我的问题是: 1-如何计算2个以上的元素?在按下enter按钮之前,元素的数量未知 2-如何计算浮点数?如果要计算浮动元素,它将终止服务器和客户端 3

我对Java和Stackoverflow也很陌生。所以,我在Stackoverflow中找到了这段代码。只是改变了一些计算。很抱歉给您带来不便

此服务器可以加、减、乘、除2个整数。它还可以计算整数的正弦、正切和余弦

例如,如果要添加2和3,只需在客户端的控制台中键入add23即可。 如果要查找1的余弦,请在控制台中键入cos1

明天之前我需要答复

我的问题是:

1-如何计算2个以上的元素?在按下enter按钮之前,元素的数量未知

2-如何计算浮点数?如果要计算浮动元素,它将终止服务器和客户端

3-无论何时客户端连接,服务器都将以欢迎的方式响应客户端,而客户端将以hi的方式响应。如何做到这一点

代码是

服务器端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server 
{ 
    public static void main(String [] args) throws IOException 
    { 
        ServerSocket opensocket = new ServerSocket(5010); //put server online
        while(true)  
        { 
            System.out.println("Waiting to accept connection");
            Socket clientSock = opensocket.accept();  //open server to connections
            System.out.println("Connection accepted");
            process(clientSock);                    //process accepted connection
            System.out.println("Connection closed");
        } 
    }  

    //BufferedReader(Reader r)
    static void process(Socket sock) throws IOException 
    {  
        InputStream in = sock.getInputStream(); 
        BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
        OutputStream out = sock.getOutputStream(); 
        PrintWriter pw = new PrintWriter(out, true);       

        String input = br.readLine(); //get user input from client                

        while(input != null && !input.equals("bye")) //check for input, if bye exit connection
        {              
            float answer = operate(input); //perform desired operation on user input
            pw.println(answer);          //print out result
            //pw.println("answer");          //print out result
            input = br.readLine();       //get next line of input  
        } 
        sock.close(); 
    }  

    //Talk to the client          
    static float operate(String s) 
    { 
        System.out.println(s); //check if same as client input

        Scanner myScanner = new Scanner(s); 
        String opType = myScanner.next();   //gets desired operation

        System.out.println(opType); //checks for correct operation 
        switch (opType) { 
            case "ADD": 
                return (myScanner.nextFloat() + myScanner.nextFloat());
            case "SUB":
                return (myScanner.nextInt() - myScanner.nextInt());
            case "MUL":
                return (myScanner.nextInt() * myScanner.nextInt());
            case "DIV":
                return myScanner.nextInt() / myScanner.nextInt();
            case "COS":
                return (float) Math.cos(myScanner.nextInt());
            case "SIN":
                return (float) Math.sin(myScanner.nextInt());
            case "TAN":
                return (float) Math.tan(myScanner.nextInt());
            default:
                return (0);

        }        
    }
} 
客户端

import java.io.*;
import java.net.Socket;
import java.util.Scanner;


public class Client
{


  public static void main(String[] args) throws Exception
  {
     Socket Sock = new Socket("LocalHost", 5010);
     BufferedReader br = new BufferedReader(new InputStreamReader(Sock.getInputStream()));
     PrintWriter pw = new PrintWriter(Sock.getOutputStream(), true);


     Scanner sc = new Scanner(System.in);
     String input;


     while(true)
     {
     System.out.println("Please enter your function and numbers:");
        input = sc.nextLine();

        pw.println(input);

        if(input.equals("disconnect"))
        {
           System.out.println("disconnected from the server");
           break;

        }


        System.out.println(br.readLine());
     }

     Sock.close();

  }


}

对于1,使用循环和一些数据结构。ArrayList适用于此。当您将线拉入时,使用您正在使用的任何分隔符(如空格)将其拆分。拉出op类型的第一个字符串,就像您所做的那样,但随后将所有剩余部分按您想要的类型添加到列表中。然后使用循环对列表中的所有元素执行该操作并返回它。例如:

Scanner myScanner = new Scanner(s);
String opType = s.next();

List numbers = new ArrayList();
while( s.hasNextFloat() )
{
    numbers.add( s.nextFloat() ) // or whatever type you want
}
它存储在操作旁边传入的任意数量的元素。现在,您可以对列表中的任意多个元素执行所需的操作:

float result = 0;
for(float f : numbers)
{
    result += f;
}

您可以在每个操作类型的方法中执行此操作,以保持交换机结构不会变得杂乱无章。

对于问题,您可以在其中一个案例中使用float f=nextfloat;虽然但是如果你想证明用户是一个{f+=nextfloat;}你的第三个问题似乎很基本,所以我想我没有真正理解这个问题,只需打印回welcom,然后在一段时间内检查扫描仪。下一步查看hi