因为你使用了BufferedReader的readLine方法,这个方法要读取到换行符才会停止阻塞。所以要在所有write的字符串末尾加上换行符("\r\n")
创新互联建站是一家集网站建设,高青企业网站建设,高青品牌网站建设,网站定制,高青网站建设报价,网络营销,网络优化,高青网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
最后帮你改得:
服务器端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server extends Thread{
Socket s = null;
public static ListChat chats = new ArrayListChat();
public static void main(String[] args) {
new Server().start();
}
public void run() {
try {
// 指定端口开始监听
ServerSocket ss = new ServerSocket(3456);
// 阻塞并接受客户端连接请求
while (true) {
s = ss.accept();
Chat chat = new Chat(s);
// 每接收一个客户端就起一个单独的聊天线程
new Thread(chat).start();
chats.add(chat);
System.out.println("Join a client thread!");
System.out.println("Current client thread amount: " + chats.size());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 聊天线程
class Chat implements Runnable {
BufferedReader br = null;
BufferedWriter bw = null;
Socket s = null;
public Chat(Socket s) {
this.s = s;
try {
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
} catch (Exception e) {
e.printStackTrace();
}
}
// 将客户端发来的消息打印并重发回去
@Override
public void run() {
try {
String str = null;
bw.write("hello");
bw.write("\r\n");
bw.flush();
while (true) {
if ((str = br.readLine()) != null) {
System.out.println("Client say: " + str);
bw.write(str);
bw.write("\r\n");
bw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
==============================
客户端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client implements Runnable {
Socket s = null;
BufferedWriter write = null;
BufferedReader read = null;
Scanner input = new Scanner(System.in);
public static void main(String[] args) {
Client client = new Client();
client.start();
}
public void start() {
String str = null;
try {
s = new Socket("127.0.0.1", 3456);
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
write = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
new Thread(this).start();
//负责发送消息给服务端
while (true) {
str = input.next();
if (str.equalsIgnoreCase("bye")) {
break;
}
write.write(str);
write.write("\r\n");
write.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
write.close();
read.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//负责接收服务端的消息
@Override
public void run() {
String str = null;
try {
while (true) {
str = read.readLine();
System.out.println("Client say:" + str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
正好我闲着,给你写一个吧。
我写的这个评委分数是在代码里固定到数组里了,如果你需要运行时手动输入评分,可以将oldScores里的数据改成手动输入就行了(这个不用我再写了吧,如果不会再追问,再告诉你)。
你先新建一个类,将下面的main方法全部复制进去就能运行了,自己看一下吧。
/** 主方法 */
public static void main(String[] args)
{
/** 保存原始评分的数组(如果你需要运行时手动输入分数,将 oldScores中的数据改成手动输入就行了 */
double[] oldScores = {15, 77, 55, 88, 79, 98, 67, 89, 68, 88};
/** 最终将用来保存排序后的数组 */
double[] scores = new double[oldScores.length];
double temp;
/** 平均分 */
double avg = 0;
int k;
/** 将原始评分放入最终排序数组 */
for (int i = 0; i oldScores.length; i++)
{
scores[i] = oldScores[i];
}
/** 开始排序 */
for (int i = 0; i scores.length - 1; i++)
{
k = i;
for (int j = i + 1; j scores.length; j++)
{
if (scores[k] scores[j])
{
k = j;
}
}
if (i != k)
{
temp = scores[k];
scores[k] = scores[i];
scores[i] = temp;
}
}
/** 计算去掉最高分和最低分之后的和 */
double sum = 0;
/** 记录计算平均分的分数个数 */
double num = 0;
for (int i = 1; i scores.length - 1; i++)
{
num++;
sum += scores[i];
}
/** 计算平均分 */
avg = sum / num;
/** 最公平的肯定不是在scores数组两端 */
double zgp = 0;
double cha = 0;
/** 标记与平均值差值最小的分数位置 */
int flag = 0;
/** 开始寻找最公平评分 */
for (int i = 1; i scores.length - 1; i++)
{
/** 为cha赋初始值,注意比较差值要使用绝对值比较 */
if (i == 1)
{
cha = Math.abs(scores[i] - avg);
}
double cha1 = Math.abs(scores[i] - avg);
if (cha1 cha)
{
cha = cha1;
flag = i;
}
}
zgp = scores[flag];
/** 由于最不公平的分数肯定在scores数组的第一个或者是最后一个 */
double bgp = 0;
if (Math.abs(scores[0] - avg) Math.abs(scores[scores.length - 1] - avg))
{
bgp = scores[0];
}
else
{
bgp = scores[scores.length - 1];
}
/** 全部计算完成,下面开始输出结果 */
System.out.println("原始评委分数如下:");
for (int i = 0; i oldScores.length; i++)
{
System.out.print(oldScores[i] + ", ");
}
System.out.println();
System.out.println("排序后分数如下:");
for (int i = 0; i scores.length; i++)
{
System.out.print(scores[i] + ", ");
}
System.out.println();
System.out.println("去掉最高分和最低分后平均分:" + avg);
System.out.println("最公平分数:" + zgp);
System.out.println("最不公平分数:" + bgp);
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入学生的分数:");
double score = input.nextDouble();
int level1,level2;
if(score=60.0 score=100.0){
System.out.print("该学生成绩为优秀!");
}
else if(score=0 score60.0){
System.out.print("该学生成绩为不及格!");
}
else{
System.out.print("您输入的成绩有误!");
}
}
}