JAVA myEclipse下控制台输入与输出问题 50
import java.util.*;
public class Test11 {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入学生的数量:");
int studentNum=in.nextInt();
System.out.println("请输入课程的数目:");
int courseNum=in.nextInt();
String[] studentName=new String[studentNum];
String[] courseName=new String[courseNum];
int[][] fenshu=new int[studentNum][courseNum];
for(int i=0;i<courseNum;i++){
System.out.println("请输入第"+(i+1)+"门课程的名字:");
courseName[i]=in.next();
}
for(int i=0;i<studentNum;i++){
System.out.println("请输入学生的名字:");
studentName[i]=in.next();
for(int j=0;j<courseNum;j++){
System.out.println("请输入"+studentName[i]+courseName[j]+"的成绩:");
fenshu[i][j]=in.nextInt();
}
}
}
}
运行之后在控制台状况:
请输入学生的数量:
2
请输入课程的数目:
2
请输入第1门课程的名字:
语文
请输入第2门课程的名字:
数学
请输入学生的名字:
张三
88请输入xshushszhangsanzha张三语文的成绩:
问题1:在输入张三后,打印输出的内容多了很多字符。
问题2:输入名字张三后,输入成绩无法正常?
请高手帮忙指点一下如何处理上面的问题,谢谢 展开
首先我描述一下问题,我在做udp socket编程(一个聊天的程序)的时候,从控制台中读取中文,然后再向控制台中打印,出现中文乱码的情况。
1、出现乱码最根本的原因就是编码和解码不一致的情况。问题分析,从控制台中读取数据,数据源为控制台,输出为乱码,目标源也为控制台,但是在读取和输出的过程中有可能出现乱码,
最简单的例子就是控制台上的编码为gbk,gbk是两个字节编码的,而utf-8是三个字节。所以会出现乱码问题,
2、解决办法
(1)打开eclipse或myeclipse,点击run-》runconfigurations
如图提示,改成UTF-8,但是这里强调一下,有的eclipse或myeclipse有可能是gbk的形式,不同形式改成不同的编码,多尝试一下。
这里也需要更改一下。
(2)方法二:
打开eclipse.ini文件(在eclipse的安装目录) 添加上这句话 -Dfile.encoding = utf-8,设置系统属性file.encoding为utf-8.
2、附上我做的一个聊天的小程序,把ip到时候可以改成你想聊天的那个人的ip,两边都要运行这段代码。
package com.hzwealth.test.chat;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/**
* C&D聊天室
* @author lixiaochao
* */public class UdpChatTest { public static void main(String[] args) { new Thread(new UdpClientThread()).start(); new Thread(new UdpServerThread()).start();
}
}/**
* 发送端
* @author lixiaochao
* */class UdpServerThread implements Runnable{
@Override public void run() { try {
DatagramSocket ds = new DatagramSocket();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));
String line = null; while((line = reader.readLine())!= null){
//这里注意,我们需要写上你对话人的ip地址。
InetAddress address = InetAddress.getByName("你的对话人的ip地址");
DatagramPacket dp = new DatagramPacket(line.getBytes(), line.getBytes().length, address, 9999);
ds.send(dp);
System.out.print("我说:"+line+"\n\r"); if("~over".equals(line)){
System.out.println("发送者退出"); break;
}
}
reader.close();
ds.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}/**
* 接收端
* @author lixiaochao
* */class UdpClientThread implements Runnable{
@Override public void run() { try {
DatagramSocket ds = new DatagramSocket(9999);
System.out.println(System.getProperty("file.encoding")); while(true){ byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
InetAddress address= dp.getAddress();
String msg = new String(buf, 0, buf.length,"GBK");
System.out.println(address+"说:"+msg); if("~over".equals(msg)){ break;
}
}
ds.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
首先谢谢你花时间来看我的问题。
你讲的内容比较深,我是初学者,还没有那么深入的学习。上面的代码输出异常问题是在特定的软件下才出现的,只是怀疑是myEclipse的设置问题,且网络上我也查找了很多的解决办法,基本上都是说控制台输出不支持中文的问题。
另外在cmd下面使用JDK8运行则没有上述问题。