String filename = "phonebook.dat";
String string;
int count = 1;
BufferedReader fileout = new BufferedReader(new FileReader(filename));
while((string = fileout.readLine() ) != null)
{
StringTokenizer tokenzier = new StringTokenizer(string,"\t");
while(tokenzier.hasMoreTokens())
{
stdOut.println("\n********" + count + "********\n");
stdOut.println("Name : " + tokenzier.nextToken());
stdOut.println("Phonenumber : " + tokenzier.nextToken());
stdOut.println("QQ : " + tokenzier.nextToken());
stdOut.println("E-mail : " + tokenzier.nextToken());
stdOut.println("Group : " + tokenzier.nextToken());
count ++;
}
}
String select;
int selection;
BufferedReader br = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
String s;
while((s = br.readLine()) != null)
sb.append(s + " ");
StringTokenizer tokenizer = new StringTokenizer(sb.toString(),"\t");
ArrayList<String> array = new ArrayList<String>();
while(tokenizer.hasMoreTokens())
array.add(tokenizer.nextToken() + "\t");
stdErr.println("Please input the number of the person who you want to delete : "); //*********************
select = stdIn.readLine();
selection = Integer.parseInt(select);我的程序时打开一个联系人信息存储的文件,例如:
Uknown 12345678910 123456789 [email protected] friend Li Ming 123456 123456 [email protected] friend ommited………………
每个信息隔一个换行符
然后我按照顺序读取,请注意,问题来了,我竟然奇迹的发现代码中注释为***************的地方竟然提前运行至上面的循环中间了,如:
//Output
********1********Name : Uknown
Phonenumber : 12345678910
QQ : 123456789
E-mail : [email protected]
Group : friendPlease input the number of the person who you want to delete : //就是这里。本来应该出现在所有信息的后面。结果。********3********Name : Li Ming
Phonenumber : 123456
QQ : 123456
E-mail : [email protected]
Group : friend
我以为是编译器抽风了,就重启了一下,第一次运行时正常者呢。结果第二次又成这样子了。。以前也有遇到过这种提前运行的情况,但是没有太在意 ,请问这到底是怎么一回事啊?怎么解决啊?好纠结。
String string;
int count = 1;
BufferedReader fileout = new BufferedReader(new FileReader(filename));
while((string = fileout.readLine() ) != null)
{
StringTokenizer tokenzier = new StringTokenizer(string,"\t");
while(tokenzier.hasMoreTokens())
{
stdOut.println("\n********" + count + "********\n");
stdOut.println("Name : " + tokenzier.nextToken());
stdOut.println("Phonenumber : " + tokenzier.nextToken());
stdOut.println("QQ : " + tokenzier.nextToken());
stdOut.println("E-mail : " + tokenzier.nextToken());
stdOut.println("Group : " + tokenzier.nextToken());
count ++;
}
}
String select;
int selection;
BufferedReader br = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
String s;
while((s = br.readLine()) != null)
sb.append(s + " ");
StringTokenizer tokenizer = new StringTokenizer(sb.toString(),"\t");
ArrayList<String> array = new ArrayList<String>();
while(tokenizer.hasMoreTokens())
array.add(tokenizer.nextToken() + "\t");
stdErr.println("Please input the number of the person who you want to delete : "); //*********************
select = stdIn.readLine();
selection = Integer.parseInt(select);我的程序时打开一个联系人信息存储的文件,例如:
Uknown 12345678910 123456789 [email protected] friend Li Ming 123456 123456 [email protected] friend ommited………………
每个信息隔一个换行符
然后我按照顺序读取,请注意,问题来了,我竟然奇迹的发现代码中注释为***************的地方竟然提前运行至上面的循环中间了,如:
//Output
********1********Name : Uknown
Phonenumber : 12345678910
QQ : 123456789
E-mail : [email protected]
Group : friendPlease input the number of the person who you want to delete : //就是这里。本来应该出现在所有信息的后面。结果。********3********Name : Li Ming
Phonenumber : 123456
QQ : 123456
E-mail : [email protected]
Group : friend
我以为是编译器抽风了,就重启了一下,第一次运行时正常者呢。结果第二次又成这样子了。。以前也有遇到过这种提前运行的情况,但是没有太在意 ,请问这到底是怎么一回事啊?怎么解决啊?好纠结。
这一行改为了stdOut.println("omitted...")
结果又正常了,是输出流和错误输出流的区别吗?请大神解释下,万分感谢。
我猜测是在eclipse下。
eclipse跟运行的java程序是两个进程,
涉及进程间通信的问题,
不知道eclipse是如何实现的。
麻烦你在看下下面的示例程序,结果和上面一样,我把它简化了一些。
import java.io.*;
import java.util.*;
class huantinglove{
private static BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in)); private static PrintWriter stdOut =
new PrintWriter(System.out, true); private static PrintWriter stdErr =
new PrintWriter(System.err, true); public static void main(String[] args)throws IOException{
stdErr.println("1");
stdErr.flush();
stdOut.println("2");
}
}
麻烦你在看下下面的示例程序,结果和上面一样,我把它简化了一些。
import java.io.*;
import java.util.*;
class huantinglove{
private static BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in)); private static PrintWriter stdOut =
new PrintWriter(System.out, true); private static PrintWriter stdErr =
new PrintWriter(System.err, true); public static void main(String[] args)throws IOException{
stdErr.println("1");
stdErr.flush();
stdOut.println("2");
}
}
2有时候会出现在1的前面运行。
我的stdErr.flush用的不是很合适。大家无视它吧。。
来个大神帮帮忙吧
两个println走的是两个不同的线程,由于ide运行速度不是很快,比不上pc,导致多线程的时候,打印的东西的顺序是随机的,而且好像很难消除