Java程序问题,请问下面的程序编译可以通过,但是运行到输入价格后,就不进行了。怎么回事?

importjava.io.*;importjava.util.*;publicclassCaidan{publicstaticvoidmain(Stringargs[]... import java.io.*;
import java.util.*;
public class Caidan {

public static void main(String args[])throws IOException{
Map<String ,String > map=new HashMap<String,String>();

ObjectOutputStream bot=new ObjectOutputStream(new FileOutputStream("c:/newlist.txt"));
boolean b=true;
inner:
while(b){
System.out.println("添加新菜:");
Scanner cname=new Scanner(System.in);
String c=cname.next();
System.out.println("添加价格:");
String a=cname.next();
map.put(c,a);
System.out.println("是否继续添加:是1,退出0");
outter:
while(true){
int n=cname.nextInt();
if(n==1)continue inner;
else if(n==0){b=false;continue inner;}
else{System.out.println("输入有误:");continue outter;}

}
}
Set<String> set = map.keySet();

for (Iterator<String> i = set.iterator(); i.hasNext();) {
bot.writeBytes(map.get(i.next()));
}

}
}
展开
 我来答
seastar_
2011-05-15 · 超过25用户采纳过TA的回答
知道答主
回答量:56
采纳率:100%
帮助的人:55万
展开全部

程序本身没大错,就是scanner每次都new一个有点设计上的问题,改的版本在下面,有注释

运行结果:

package learn;

import java.io.*;

import java.util.*;

public class Other {

public static void main(String args[]) throws IOException {

Map<String, String> map = new HashMap<String, String>();

//我不理解为什么下面要用ObjectOutputStream?OutputStreamWriter/FileWriter无法满足你的要求?

//ObjectOutputStream顾名思义是写出对象的,你可以直接用它吧上面那个map写到文件里

//不过写出来的结果你可能看不懂,二进制的

//最后再用ObjectInputStream读入就可以了

//推荐你去查下java.io的api

OutputStreamWriter bot = new OutputStreamWriter(new FileOutputStream("newlist.txt"));//位置在当前文件夹下,我的习惯,可以不改,无意义

Scanner cname = new Scanner(System.in); //每次循环都要新建一个scanner?我认为只要最初有一个就够用了

while (true) {

System.out.println("添加新菜:");       

String c = cname.next();

System.out.println("添加价格:");

String a = cname.next();

map.put(c, a);

System.out.println("是否继续添加:是1,退出0");

int n = cname.nextInt();

if (n != 1) { //查一下while的基本用法,可以简化很多语句

break;

}

}

Set<String> set = map.keySet();

for (Iterator<String> i = set.iterator(); i.hasNext();) {

bot.write(map.get(i.next()));

}

//没有这两句你的文件里很有可能啥都没有,如果你有意或者无意使用了BufferedOutputStream,、

//另外关闭流是个好习惯

bot.flush();          

bot.close();

System.out.println("finish");

}

}

百度网友d44faec
推荐于2016-02-10 · TA获得超过640个赞
知道小有建树答主
回答量:699
采纳率:0%
帮助的人:184万
展开全部
主要问题在于Scanner类的分隔符(delimiter)的问题。作如下改写,可正常工作:
import java.io.*;
import java.util.*;

public class Caidan
{
public static void main(String args[])
throws IOException
{
Map<String, String> map = new HashMap<String,String>();
ObjectOutputStream bot = new ObjectOutputStream(new FileOutputStream("c:/newlist.txt"));
boolean b = true;
inner:
while(b)
{
System.out.println("添加新菜:");
Scanner cname = new Scanner(System.in).useDelimiter("\\n");;
String c = cname.next();
System.out.println("添加价格:");
String a = cname.next();
map.put(c, a);
System.out.println("是否继续添加:是1,退出0");
outter:
while(true)
{
cname.reset();
int n = cname.nextInt();
if(n == 1)
continue inner;
else if(n == 0)
{
b = false;
continue inner;
}
else
{
System.out.println("输入有误:");
continue outter;
}
}
}
Set<String> set = map.keySet();

for(Iterator<String> i = set.iterator(); i.hasNext();)
{
bot.writeBytes(map.get(i.next()));
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-05-16
展开全部
应该是map存值的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式