为啥总是报这个java.io.IOException: Stream closed,有人帮帮我么

你好像一条狗 2017-03-06 05:07:45
import java.io.*;
public class YueSeFu {
public static void main(String[] args)
{
CycLink t=new CycLink();
t.BaoShu(8, 1, 5);
}

}

class CycLink
{
Child firstChild=null;
Child NowChild=null;
void NewChild(int Sum)
{//注册Sum位学生的信息
while(true)
{
if(Sum<=0)
{
System.out.println("学生人数输入错误,请重新输入:");
continue;
}
System.out.println("请输入第1位学生的名称");
BufferedReader br=null;
BufferedReader bc=null;
firstChild=new Child();
try {
br=new BufferedReader(new InputStreamReader(System.in));
firstChild.data=br.readLine();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
firstChild.nextChild=firstChild;
NowChild=firstChild;
for(int i=2;i<=Sum;i++)
{

System.out.println("请输入第"+i+"位学生的名称");
Child temp=new Child();
try {
bc=new BufferedReader(new InputStreamReader(System.in));
temp.data=bc.readLine();
} catch (Exception e) {
e.printStackTrace();
}
NowChild.nextChild=temp;
if(i==Sum)
{
temp.nextChild=firstChild;
System.out.println("学生信息输入完毕");
try {
bc.close();
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
return;
}
NowChild=temp;

}
}
}

void BaoShu(int Sum,int First,int Num)
{
System.out.println("请输入学生总人数");
this.NewChild(Sum);
NowChild=firstChild;
//定位开始的位置
for(int i=1;i<First;i++)
{
NowChild=NowChild.nextChild;
}
//循环数数,直到最后人数剩一个
System.out.print("出圈序列:");
do
{
for(int i=1;i<Num;i++)
NowChild=NowChild.nextChild;
System.out.print(NowChild.data+"\t");
NowChild=NowChild.nextChild.nextChild;
}while(NowChild.nextChild!=NowChild);
System.out.print(NowChild.data);
}
}

class Child
{
String data;
Child nextChild=null;
// Child(String data)
// {
// this.data=data;
// }
}
...全文
300 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuandlv 2017-03-07
  • 打赏
  • 举报
回复
循环里面不要做这种经常。close的行为。
你好像一条狗 2017-03-06
  • 打赏
  • 举报
回复
[quote=引用 2 楼 qq_30831935 的回复:] 能说下为什么这里的br不用关,还有就是为什么我最后输入完成后,它程序好像是无限循环在输出那几个人,然后就卡死了
鱿鱼ing 2017-03-06
  • 打赏
  • 举报
回复
import java.io.*; public class YueSeFu { public static void main(String[] args) { CycLink t=new CycLink(); t.BaoShu(8, 1, 5); } } class CycLink { Child firstChild=null; Child NowChild=null; void NewChild(int Sum) {//注册Sum位学生的信息 while(true) { if(Sum<=0) { System.out.println("学生人数输入错误,请重新输入:"); continue; } System.out.println("请输入第1位学生的名称"); BufferedReader br=null; BufferedReader bc=null; firstChild=new Child(); try { br=new BufferedReader(new InputStreamReader(System.in)); firstChild.data=br.readLine(); } catch (Exception e) { e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } firstChild.nextChild=firstChild; NowChild=firstChild; for(int i=2;i<=Sum;i++) { System.out.println("请输入第"+i+"位学生的名称"); Child temp=new Child(); try { bc=new BufferedReader(new InputStreamReader(System.in)); temp.data=bc.readLine(); } catch (Exception e) { e.printStackTrace(); } NowChild.nextChild=temp; if(i==Sum) { temp.nextChild=firstChild; System.out.println("学生信息输入完毕"); try { bc.close(); } catch (IOException e) { e.printStackTrace(); } System.exit(0); return; } NowChild=temp; } } } void BaoShu(int Sum,int First,int Num) { System.out.println("请输入学生总人数"); this.NewChild(Sum); NowChild=firstChild; //定位开始的位置 for(int i=1;i<First;i++) { NowChild=NowChild.nextChild; } //循环数数,直到最后人数剩一个 System.out.print("出圈序列:"); do { for(int i=1;i<Num;i++) NowChild=NowChild.nextChild; System.out.print(NowChild.data+"\t"); NowChild=NowChild.nextChild.nextChild; }while(NowChild.nextChild!=NowChild); System.out.print(NowChild.data); } } class Child { String data; Child nextChild=null; // Child(String data) // { // this.data=data; // } } 这里先不关就可以了
你好像一条狗 2017-03-06
  • 打赏
  • 举报
回复
其中63是我为了检查错误而加的一行,因为之前不加这行,运行后,Myeclipse直接卡死了,

62,614

社区成员

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

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