如何将浮点数集成到java服务器计算器中?
我对Java和Stackoverflow也很陌生。所以,我在Stackoverflow中找到了这段代码。只是改变了一些计算。很抱歉给您带来不便 此服务器可以加、减、乘、除2个整数。它还可以计算整数的正弦、正切和余弦 例如,如果要添加2和3,只需在客户端的控制台中键入add23即可。 如果要查找1的余弦,请在控制台中键入cos1 明天之前我需要答复 我的问题是: 1-如何计算2个以上的元素?在按下enter按钮之前,元素的数量未知 2-如何计算浮点数?如果要计算浮动元素,它将终止服务器和客户端 3-无论何时客户端连接,服务器都将以欢迎的方式响应客户端,而客户端将以hi的方式响应。如何做到这一点 代码是 服务器端如何将浮点数集成到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
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