思路:
万能哈希
1.第一行输入的是长度(整型数据)
2.后面N行输入的是”键值对“元素(字符串数据,要分割再处理),每一个元素有index和value,看看表中有无相同index,若有则将该value取出,相加后再更新表中value,若无则放入键值对进哈希表

 

 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.io.StreamTokenizer;
 4 import java.util.*; 
 5 
 6 public class Main{
 7     public static void main(String[] args) throws Exception{
 8         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 9         int len = Integer.valueOf(br.readLine());//长度
10         //System.out.println("len: "+len);
11         int index=0,value=0;
12         String[] kvS = new String[2];
13         int[] kv = new int[2];//每一对键值对
14         String str = "";
15         Map<Integer,Integer> ages = new HashMap<Integer,Integer>();
16         //int value = 0;//用于更新value值
17         for(int i =0;i<len;i++){
18             str = br.readLine();
19             //System.out.println("str: "+str);
20             kvS = str.split(" ");//每一行,空格分隔放入字符串数组
21             //System.out.println("kvS: "+kvS[0]+"kvS: "+kvS[1]);
22             //将字符串数组转为整型数组
23             kv[0] = Integer.valueOf(kvS[0]);
24             //System.out.println("key: "+kv[0]);
25             kv[1] = Integer.valueOf(kvS[1]);
26             //System.out.println("value: "+kv[1]);
27             
28             if(ages.containsKey(kv[0])){
29                 //System.out.println("原value: "+ages.get(kv[0]));
30                 ages.put(kv[0],ages.get(kv[0])+kv[1]);
31                 //System.out.println("后value: "+ages.get(kv[0]));
32             }else{
33                 ages.put(kv[0],kv[1]);
34                 //System.out.println("put in kv: "+ages.get(kv[0]));
35             }
36         }//while
37         
38         //System.out.println("---------------------------------------");
39         //输出
40         Set set = ages.keySet();
41         Object[] ob = set.toArray();
42         Arrays.sort(ob);
43         for(Object o : ob){
44             System.out.println(o+" "+ages.get(o));
45         }
46         
47         
48         
49     }
50 }

 

 
百度:
StreamTokenizer使用
java StreamTokenizer使用 - likai_liche - 博客园 (cnblogs.com)
//创建StreamTokenizer对象
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
//获取数据
st.nextToken();
int i = (int) st.nval;//st.nval默认解析出的格式是double
st.nextToken();
String a = st.sval;

 

错误:

 

 应改为:

while (st.nextToken() != StreamTokenizer.TT_EOF)//无返回值


其他实例:
while (st.nextToken() != StreamTokenizer.TT_EOF) {
                //在调用 nextToken 方法之后,ttype字段将包含刚读取的标记的类型
                switch (st.ttype) {
                //TT_EOL指示已读到行末尾的常量。
                case StreamTokenizer.TT_EOL:
                    break;
                //TT_NUMBER指示已读到一个数字标记的常量
                case StreamTokenizer.TT_NUMBER:
                    //如果当前标记是一个数字,nval字段将包含该数字的值
                    s = String.valueOf((st.nval));
                    System.out.println(s);
                    numberSum += s.length();
                    break;
                //TT_WORD指示已读到一个文字标记的常量
                case StreamTokenizer.TT_WORD:
                    //如果当前标记是一个文字标记,sval字段包含一个给出该文字标记的字符的字符串
                    s = st.sval;
                    wordSum += s.length();
                    break;
                default:
                    //如果以上3中类型都不是,则为英文的标点符号
                    s = String.valueOf((char) st.ttype);
                    symbolSum += s.length();
                }
            }

 

 
最后还是没有想到可以将换行符取消作为结束符的方法
换成bufferedReader了

 

posted on 2022-07-31 18:59  Jolyne123  阅读(253)  评论(0编辑  收藏  举报