求救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());
}
}