JAVA 输入流停止后如何重置啊

kexzheng 2011-04-24 08:26:51
如果我这样写了。
Scanner input = new Scanner(System.in);
while(input.hasNext()) {
....
}
//当我按下 ctrl + z 结束输入流的时候,做以下操作
int tmp = input.nextInt();
//这时候会抛出 java.util.NoSuchElementException 异常。
//请问要如何才可以重新启用输入流,让我可以继续进行输入操作。
我试过用 input.reset();可是没有作用。希望帮帮忙啊。
...全文
337 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2011-04-25
  • 打赏
  • 举报
回复
应该是没有办法的。按下Ctrl+Z就表示结束了输入流了。
小绵羊 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kexzheng 的回复:]

引用 3 楼 x19881216 的回复:
ctrl + z 是终止当前程序不是终止输入流
在控制台用这个jvm都被杀死了。


那如果JVM退出了,为什么在按下 ctrl + z 后还可以进行输出操作啊。只是不能输入了?
[/Quote]
把你代码贴上来看看
kexzheng 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 x19881216 的回复:]
ctrl + z 是终止当前程序不是终止输入流
在控制台用这个jvm都被杀死了。
[/Quote]

那如果JVM退出了,为什么在按下 ctrl + z 后还可以进行输出操作啊。只是不能输入了?
小绵羊 2011-04-25
  • 打赏
  • 举报
回复
ctrl + z 是终止当前程序不是终止输入流
在控制台用这个jvm都被杀死了。
小绵羊 2011-04-25
  • 打赏
  • 举报
回复


import java.util.Scanner;
class Test {
public static void main(String[] args){
boolean flag = true;
while(flag){
System.out.print("input:");
Scanner s = new Scanner(System.in);
try{
if(s.nextInt()==-1){//读到结束标示退出循环等待
flag = false;
}

//do something
}catch(Exception e){
System.out.println(" error!");//提示用户输入错误,进入循环等待
//do something
}
}

}
}


小绵羊 2011-04-25
  • 打赏
  • 举报
回复
import java.util.Scanner;
class Test {
public static void main(String[] args){
boolean flag = true;
while(flag){
Scanner s = new Scanner(System.in);
try{
if(s.nextInt()==-1){
flag = false;
}
}catch(Exception e){
//do something
}
}

}
}
处理异常继续循环等待
kexzheng 2011-04-25
  • 打赏
  • 举报
回复
因为我是写在一个工程里面有很多类,很多代码。我所以这里贴上一个使用 ctrl + z 的地方。我是有一个菜单项。
1:添加记录 addRecord()方法
2:查看记录 readRecord()方法
3:。。。
4:。。。
请选择:

如果输入1之后调用 addRecord()方法。因为在addRecord()方法中使用了 ctrl + z ,所以当 addRecord()方法执行完毕之后。输入流停止了。我就不能对这个菜单项目进行选择了。只能退出程序,重新再运行一次。
下面是addRecord()方法。我知道可以用其他方式退出循环。只不过想知道用 ctrl + z这种方式处理后,该怎么重新可以再次输入。麻烦了。

public void addRecords(){
//RandomAccessRecord是我自己写的一个类。
RandomAccessRecord record = new RandomAccessRecord();

int recordNumber = 0;
String toolName;
int quantity;
double cost;

Scanner input = new Scanner(System.in);

System.out.printf("\t提示:用 ctrl + z 停止添加记录 (添加范围 1 ~ 100)\n");
System.out.printf("\t输入:%s %s %s %s\n请输入:", "第几个记录","工具名称","工具重量","工具价格");

while(input.hasNext()){
try{
recordNumber = input.nextInt();
toolName = input.next();
quantity = input.nextInt();
cost = input.nextDouble();

if(recordNumber > 0 && recordNumber <= NUMBER_RECORDS){

record.setRecordNumber(recordNumber);
record.setToolName(toolName);
record.setQuantity(quantity);
record.setCost(cost);
//output是RandomAccessFile的一个对象
output.seek((recordNumber - 1)*RandomAccessRecord.SIZE);
record.write(output);
}
}
catch(IOException IOE){
System.err.println("Error to File");
return;
}
catch (NoSuchElementException elementException){
System.err.println("不合法的输入");
input.nextLine();
}
System.out.printf("\t提示:用 ctrl + z 停止添加记录 (添加范围 1 ~ 100)\n");
System.out.printf("\t输入:%s %s %s %s\n请输入:", "第几个记录","工具名称","工具重量","工具价格");
}
System.out.println("\n你已经退出添加信息了。");
//input.reset();
//input = new Scanner(System.in);
/* Scanner ii = new Scanner(System.in);
int aa= ii.nextInt();System.out.print(aa);
try {
ii.wait();
} catch ( e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
kexzheng 2011-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lang_love_java 的回复:]
不知道如何重新启用输入流
我这样想:
你可以在循环里面加判断语句,如何输入的数据为某一个值,就跳出循环,这样你就不用结束输入流了。
[/Quote]

确实可以。可是用 ctrl + z 的方式就不行处理 了吗?
以前学习 C++的时候结束了输入流,用 flush()就可以重新输入了。。java难道不行么么么么?
lang_love_java 2011-04-24
  • 打赏
  • 举报
回复
不知道如何重新启用输入流
我这样想:
你可以在循环里面加判断语句,如何输入的数据为某一个值,就跳出循环,这样你就不用结束输入流了。

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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