日期:2014-05-20  浏览次数:20775 次

求救Java中字符串连接和输出问题
题目是:     依次输入10个商品名称和数量,格式为:商品名称,商品数量。然后输出。要求:输出是如果商品名称相等则商品数量相加,然后再输出。

问题是相同的商品如何相加,用什么来输出。下面是我写的,到输出时不知道怎么写了,帮帮忙啊!!!!
/**
  *   输入商品名称,再输入商品数量,保存在一个字符串中
  *   如:电视,3
  *   空调,1
  *   输入10次,然后打印出来
  **/

class   StringTest5{
public   static   void   main(String   args[]){
//定义一个字符串数组用来存储商品名称和数量
String   str[]=new   String[11];

String   strName[]=new   String[11];//存储商品名称
int   strNum[]=new   int[11]; //存储商品数量

//用for循环输入10个商品名称和数量
for(int   i=0;i <10;i++){
str[i]=javax.swing.JOptionPane.showInputDialog( "请输入商品名称 ");

//判断输入是否带有 ", "。
if(str[i].indexOf( ", ") <0){
javax.swing.JOptionPane.showMessageDialog(null, "输入错误,格式为:商品名称,商品数量 ");
return;
}
//截取商品数量
String   str1=str[i].substring((str[i].indexOf( ", ")+1),(str[i].length()));
//判断逗号后面是否是数字
for(int   j=0;j <str1.length();j++){
if(!(Character.isDigit(str1.charAt(j)))){
javax.swing.JOptionPane.showMessageDialog(null, "输入错误,格式为:商品名称,商品数量1111 ");
return;
}
}
}

//实现输入的商品名称相同时,商品数量相加
for(int   s=0;s <10;s++){

//截取商品名称//截取商品数量并转为整型数

strName[s]=str[s].substring(0,str[s].indexOf( ", "));
strNum[s]=Integer.parseInt(str[s].substring((str[s].indexOf( ", ")+1),(str[s].length())));


}

///////   到下面就不知道怎么写了,帮帮忙改一下,谢谢了!!
for(int   j=0;j <10;j++){

for(int   k=0;k <9-j;k++){

//判断商品名称是否相等
if(strName[k].equals(strName[k+1])){


strNum[k]+=strNum[k+1];
strNum[k+1]=0;
str[k]=strName[k].concat(( ", "+strNum[k]+ " "));
str[k+1]= " ";
}

}

// System.out.println   (str[j]);
}




}
}




------解决方案--------------------
明显的key--value,楼上说的对,用hash表
如果不用,你的也没问题,
你已经将name和num取道两个数组里面了。就不要再用str[i]这个数组了
你从
你不是让str[i]=0了吗?strName[k+1]= " "了
输出的时候,只要加个判断就行了只要strName[i]不等于“”就输出


for(int j=0;j <10;j++){
String xxx=strName[j];
int k = strNum[j];
for(int k=j+1;k <10;k++){
//判断商品名称是否相等
if(xxx.equals(strName[k])){
strNum[j]+=strNum[k];
strName[k]= " ";
strNum[k]=0;
}

}
for(int i=0;i <10;i++)
{
if(! " ".equals(strName)){
System.out.println(strName[i] + ": " + strNum[k].toString());
}
}