做上机题,遇到问题

xiangdeweiwangfengg 2007-06-06 09:47:40
import java.io.*;
import java.util.*;
class Sorts
{
public static void main(String args[])throws Exception
{
int count;
byte b[]=new byte[1024];
InputStreamReader in;
FileWriter out;
BufferedReader br;
FileInputStream fis;
FileOutputStream fos;

try{
in=new InputStreamReader(System.in);
br=new BufferedReader(in);
out=new FileWriter("F:\\1\\Test\\3\\test.txt");

System.out.println("请输入#结束键盘输入:");
String str=br.readLine();
while(!str.equals("#")){
out.write(str+"\r\n");
str=br.readLine();
}
in.close();
out.close();
br.close();
}catch(IOException e){}

fis=new FileInputStream ("F:\\1\\Test\\3\\test.txt");
fos=new FileOutputStream("F:\\1\\Test\\3\\test1.txt");

try{
while((count=fis.read(b,0,1024))!=-1){
int c[] = new int[20];
for(int i=0; i<20; i++) {
if (b[i] != 32 && b[i] != 13 && b[i] != 10)
c[i] = b[i];
}
Arrays.sort(c);

for(int i=0; i<20; i++) {
fos.write(c[i]);
fos.write(32);
}
}
fis.close();
fos.close();
}catch(IOException e){
System.out.println("Error:"+e);
}
}
}

为什么它把12之类的2位数当作1和2来处理?排序后就不对了
比如说我输入
12 3 4 5
#
得到的结果却是:
1 2 3 4 5
我想要的结果是 :
3 4 5 12
...全文
272 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你们讲了,我清楚点了
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
顶起来
-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Set<Integer> c = new HashSet<Integer>();
我没接触过呀
davidafairy 2007-06-07
  • 打赏
  • 举报
回复
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Sorts {
public static void main(String args[]) throws Exception {
int count;
byte b[] = new byte[1024];
InputStreamReader in;
FileWriter out;
BufferedReader br;
FileInputStream fis;
FileOutputStream fos;

try {
in = new InputStreamReader(System.in);
br = new BufferedReader(in);
out = new FileWriter("e:\\1.txt");

System.out.println("请输入#结束键盘输入:");
String str = br.readLine();
while (!str.equals("#")) {
out.write(str + "\r\n");
str = br.readLine();
}
in.close();
out.close();
br.close();
} catch (IOException e) {
}

fis = new FileInputStream("e:\\1.txt");
fos = new FileOutputStream("e:\\2.txt");

try {
while ((count = fis.read(b, 0, 1024)) != -1) {
Set<Integer> c = new HashSet<Integer>();
String tmp="";
for (int i = 0; i < 20; i++) {
if (b[i] != 32 && b[i] != 13 && b[i] != 10 && b[i] != 48) {
tmp = tmp + String.valueOf((char)b[i]);

}else {
if (!"".equals(tmp)) {
c.add(Integer.valueOf(tmp));
tmp="";
}

}
}

Iterator<Integer> it = c.iterator();
while(it.hasNext()) {
int e = it.next();
for (int j=0;j<String.valueOf(e).length();j++) {
fos.write(String.valueOf(e).charAt(j));
}
fos.write(32);
}

}
fis.close();
fos.close();
} catch (IOException e) {
System.out.println("Error:" + e);
}
}

}
CodeFans 2007-06-07
  • 打赏
  • 举报
回复
当然是这样了,因为读字节的时候没一个字符是一个字节, 然后12就需要长度为2 的byte数组了。
你可以把byte数组转换成String然后解析。
或者你字节读readLine();
davidafairy 2007-06-07
  • 打赏
  • 举报
回复
首先,你并没有排序。
其次,出现“1 2 3 4 5”结果是因为:
for(int i=0; i<20; i++) {
if (b[i] != 32 && b[i] != 13 && b[i] != 10) //这个if把空格换行全过滤掉了,c数组里面结构是:12345;
c[i] = b[i];
}

for(int i=0; i<20; i++) {
fos.write(c[i]);
fos.write(32);
}
//这个输出语句是打印一个字符就打印一个空格,这样就形成了“1 2 3 4 5”
joejoe1991 2007-06-07
  • 打赏
  • 举报
回复
汗 排序要写的这么麻烦么?
Ctoyun 2007-06-07
  • 打赏
  • 举报
回复
我虽然没有回答您的问题,但也帮您顶了下,求您给小女几分好吗?我非专业,但需要点分提问啊!

呵呵,谢谢!!
richard_2010 2007-06-06
  • 打赏
  • 举报
回复
因为你读的时候是直接读的一行而处理的时候是对一个个字符处理的

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧