HashMap在HashMap

时间:2015-11-04 02:04:23

标签: java hashmap

我的项目的目标是创建一个团队联盟,并拥有每个团队的名单。我应该使用2个不同的地图。一个映射用于将团队名称保存为字符串,并使用它的对象(团队)。另一张地图用于保存带有数字和对象(球员)的名单。每当我运行此代码,并尝试测试名单是否打印出正确的数字时,我就遇到了问题。名单似乎整体清楚。我知道我已经放入了一个Roster.clear()方法,但这就是重置名单,让其他球队的球员进入。如果你需要球队的话,我会把它放在底部。非常感谢,如果有人能够回答我的问题。

import java.util.*;

public class League{

    public League(Scanner s){
        Map<String,Team> League = new HashMap<String,Team>();
        Map<Integer,Player> Roster = new HashMap<Integer, Player>();
        Team t;
        Player p;
        String team,
        name;
        Boolean throwsRightHanded;

        int number,
        position,
        plateApp,
        walks,
        strikeouts,
        hits,
        inningsPitched,
        earnedRuns,
        atBats,
        runsBattedIn,
        homeRuns,
        hitByPitch;
        team = s.next();


        while (s.hasNext()){
            if (!s.hasNext("-1")){
                number = s.nextInt();
                name = s.next();
                position = s.nextInt();
                if (s.next() == "t"){
                    throwsRightHanded = true;
                }
                else{
                    throwsRightHanded = false;
                }
                plateApp = s.nextInt();
                walks = s.nextInt();
                strikeouts = s.nextInt();
                hits = s.nextInt();
                if (position == 1){
                    //Pitcher
                    inningsPitched = s.nextInt();
                    earnedRuns = s.nextInt();
                    p = new Pitcher(inningsPitched, earnedRuns, number, name, position, 
                            throwsRightHanded, plateApp, walks, strikeouts, hits);
                }
                else{
                    atBats = s.nextInt();
                    runsBattedIn = s.nextInt();
                    homeRuns = s.nextInt();
                    hitByPitch = s.nextInt();
                    p = new PositionPlayer(atBats, runsBattedIn, homeRuns, hitByPitch, number, name, position, 
                            throwsRightHanded, plateApp, walks, strikeouts, hits);
                }

                Roster.put(number, p);
            }
            else{
                t = new Team(team, Roster);
                League.put(team, t);
                Roster.clear();
                s.next();
                if (s.hasNext())
                    team = s.next();
            }
        }
        Iterator<Team> it = League.values().iterator();
        Team teamIterator;
        while (it.hasNext()){
            teamIterator = it.next();
            System.out.println(teamIterator);
            Iterator<Player> itt = teamIterator.getRoster().values().iterator();
            while (itt.hasNext()){
                System.out.println(itt.next());
            }
        }
    }

重要的部分如下:

            else{
                t = new Team(team, Roster);
                League.put(team, t);
                Roster.clear();
                s.next();
                if (s.hasNext())
                    team = s.next();
            }
        }
        Iterator<Team> it = League.values().iterator();
        Team teamIterator;
        while (it.hasNext()){
            teamIterator = it.next();
            System.out.println(teamIterator);
            Iterator<Player> itt = teamIterator.getRoster().values().iterator();
            while (itt.hasNext()){
                System.out.println(itt.next());
            }
        }
    }

团队课程:

public class Team{
    private Map<Integer,Player> roster;
    private String t;

    public Team(String tname, Map<Integer,Player> floatroster){
        setRoster(floatroster);
        t = tname;
    }

    public String lookupPlayer(int n){
        if (!roster.containsKey(n)){
            System.out.println("No player with number " + n + " is on the roster for the " + t);
            return null;
        }
        else{
            return roster.values().toString();
        }
    }
    public String toString(){
        return t;
    }
    public void setRoster(Map<Integer,Player> floatroster){
        roster = floatroster;
    }
    public Map<Integer, Player> getRoster(){
        return roster;
    }

}

文件我正在阅读:

RedSox
65 Jonathan 1 t 416 23 80 111
259 32 
68 Matt 1 t 399 28 56 90
241 37 
32 Craig 1 f 383 29 55 121
245 35 
11 Clay 1 t 418 32 63 105
241 37 
46 Ryan 1 t 408 24 59 97
228 35 
51 Edwin 1 f 392 32 64 82
232 36 
37 Heath 1 t 419 31 53 109
233 38 
62 Rich 1 f 411 33 36 77
263 36 
61 Brian 1 f 397 25 59 107
240 32 
56 Joe 1 t 390 32 57 89
201 36 
59 Tommy 1 f 408 26 69 104
284 35 
64 Jean 1 t 421 44 37 94
263 33 
70 Roman 1 t 428 31 46 91
252 35 
20 Wade 1 f 386 36 49 73
256 38 
41 Alex 1 t 418 28 61 70
240 36 
60 Henry 1 f 401 26 74 115
255 37 
22 Rick 1 t 420 20 65 88
226 36 
66 Noe 1 t 408 27 61 80
225 36 
52 Eduardo 1 f 365 34 67 100
217 34 
28 Robbie 1 f 382 32 55 96
221 34 
36 Junichi 1 t 401 23 60 88
267 39 
19 Koji 1 t 364 28 47 113
236 35 
67 Brandon 1 t 392 25 66 122
210 37 
10 Ryan 2 t 592 44 82 210
406 95 29 5 
23 Blake 2 t 577 29 99 121
432 80 16 3 
7 Christian 2 t 599 34 117 196
416 95 31 6 
47 Travis 3 t 669 58 78 201
451 136 34 1 
48 Pablo 5 t 628 45 74 139
368 96 1 0 
13 Hanley 3 t 575 37 94 148
388 80 23 0 
15 Dustin 4 t 635 36 105 227
304 113 28 1 
26 Brock 4 t 1443 33 83 422
454 274 50 2 
5 Allen 3 t 654 40 108 125
383 60 2 1 
2 Xander 6 t 602 48 95 137
420 64 14 3 
50 Mookie 8 t 584 35 84 199
323 110 31 7 
25 Jackie 7 t 608 53 92 161
528 69 1 5 
38 Rusney 9 t 626 47 69 194
422 135 31 0 
34 David 3 f 567 63 99 108
399 55 1 6 
-1
Yankees
38 Andrew 1 t 388 22 67 119
213 37 
68 Dellin 1 t 364 34 65 86
265 32 
26 Chris 1 f 397 19 74 118
232 35 
65 Caleb 1 t 424 33 64 88
279 36 
30 Nathan 1 t 381 35 59 85
250 37 
74 Nick 1 t 417 33 80 92
235 33 
33 Chris 1 t 414 25 52 85
238 38 
48 Andrew 1 f 386 28 66 110
242 35 
55 Brian 1 t 419 25 48 76
273 34 
47 Ivan 1 t 445 24 51 108
256 35 
67 James 1 f 427 26 51 120
217 37 
57 Branden 1 t 416 22 73 106
212 37 
35 Michael 1 t 398 28 61 109
283 35 
50 Nick 1 t 426 24 62 95
231 37 
45 Chasen 1 f 399 18 60 74
243 35 
52 CC 1 f 397 23 49 108
234 35 
40 Luis 1 t 405 20 64 131
240 38 
19 Masahiro 1 t 420 31 26 89
195 33 
43 Adam 1 t 416 28 54 98
240 33 
41 Justin 1 f 365 26 49 104
251 35 
34 Brian 2 t 637 41 79 147
365 66 1 1 
66 John 2 t 584 58 81 150
434 92 21 1 
53 Austin 2 t 593 47 98 122
423 62 17 3 
73 Gary 2 t 709 43 66 194
407 152 35 2 
31 Greg 3 t 672 66 78 157
299 60 1 5 
14 Stephen 4 t 607 44 53 158
390 99 16 5 
18 Didi 6 t 613 33 55 217
479 126 29 3 
12 Chase 5 t 553 58 97 146
332 83 2 5 
63 Jose 4 t 683 49 124 124
380 71 12 2 
64 Robert 4 t 662 43 96 144
395 65 6 2 
17 Brendan 4 t 658 55 61 162
382 96 28 2 
29 Dustin 7 t 587 63 82 156
461 119 22 1 
36 Carlos 9 t 545 50 94 129
373 90 4 4 
22 Jacoby 8 f 657 42 43 142
473 51 1 3 
11 Brett 7 f 551 32 120 145
406 131 26 1 
72 Slade 8 f 543 50 97 132
399 70 23 2 
70 Rico 9 t 646 22 83 259
433 175 40 6 
25 Chris 9 t 576 34 103 153
432 74 6 3 
-1
BlueJays
56 Mark 1 f 440 21 63 123
208 33 
27 Brett 1 f 405 31 63 117
218 36 
50 Steve 1 t 438 30 74 106
251 38 
43 RA 1 t 384 32 72 88
254 38 
25 Marco 1 t 438 27 67 104
243 34 
35 Jeff 1 f 409 32 63 100
228 32 
32 LaTroy 1 t 402 21 66 57
261 36 
31 Liam 1 t 380 25 74 100
252 34 
36 Drew 1 t 375 26 78 83
251 36 
64 Chad 1 t 421 27 63 97
253 31 
62 Aaron 1 f 403 33 64 96
277 35 
57 Mark 1 t 376 24 59 113
234 34 
54 Roberto 1 t 423 21 58 121
247 34 
14 David 1 f 432 26 54 119
201 38 
41 Aaron 1 t 410 18 60 107
259 36 
8 AJ 2 t 610 44 115 151
400 54 12 2 
55 Russell 2 t 646 49 79 145
300 79 9 2 
30 Dioner 2 t 686 38 71 111
434 76 21 4 
15 Chris 3 t 606 47 77 126
440 53 11 3 
20 Josh 5 t 605 63 100 150
446 48 8 1 
17 Ryan 4 t 610 21 89 135
420 89 23 2 
9 Cliff 4 t 531 73 94 169
442 47 14 4 
13 Justin 3 f 651 40 85 158
380 82 5 3 
2 Troy 6 t 658 38 87 127
399 57 16 2 
19 Jose 9 t 712 44 115 239
429 145 28 1 
3 Ezequiel 7 f 589 57 104 136
351 75 18 2 
11 Kevin 8 t 671 41 81 158
380 155 31 1 
45 Dalton 8 t 638 36 104 246
343 115 30 2 
7 Ben 7 t 621 37 98 149
382 86 5 4 
-1
Orioles
35 Brad 1 t 392 35 69 116
233 32 
53 Zach 1 f 451 31 45 78
239 34 
16 Wei-yin 1 f 359 25 59 108
237 39 
71 Oliver 1 t 426 21 62 106
241 37 
61 Jason 1 t 385 22 56 103
242 33 
39 Kevin 1 t 383 33 59 104
229 38 
60 Mychal 1 t 397 26 65 118
261 36 
50 Miguel 1 t 411 32 64 83
236 36 
31 Ubaldo 1 t 371 35 69 81
227 35 
52 Steve 1 t 393 32 64 97
257 39 
17 Brian 1 f 425 28 62 113
227 36 
66 T.J. 1 f 386 30 66 91
244 35 
56 Darren 1 t 395 29 75 97
265 35 
65 Chaz 1 t 382 18 46 75
232 34 
57 Jorge 1 t 406 20 58 93
242 33 
30 Chris 1 t 394 38 67 89
226 33 
63 Tyler 1 t 420 27 69 88
278 35 
59 Mike 1 t 358 30 64 124
287 37 
45 Steve 2 t 667 55 130 141
452 57 1 3 
36 Caleb 2 t 545 48 81 165
403 47 10 0 
32 Matt 2 t 625 55 97 119
453 46 0 2 
19 Chris 3 t 636 40 88 95
438 54 0 2 
3 Ryan 4 t 722 35 85 166
436 87 28 2 
2 J.J. 6 t 668 52 99 164
417 136 32 1 
15 Paul 6 t 734 33 99 141
524 78 1 1 
13 Manny 5 t 665 39 63 137
420 45 10 3 
6 Jonathan 4 t 744 44 70 146
402 57 17 4 
34 Christian 3 t 617 40 109 128
447 58 19 3 
12 Dariel 9 t 555 56 99 170
422 111 32 2 
10 Adam 8 t 621 40 95 166
436 119 25 3 
48 Junior 7 t 689 49 123 142
425 107 11 3 
9 David 7 f 605 44 89 146
409 36 10 0 
18 Gerardo 9 f 686 34 80 206
435 116 36 3 
28 Steve 7 t 624 70 72 159
457 108 20 5 
14 Nolan 7 t 682 55 91 140
369 62 6 5 
-1
Rays
35 Matt 1 t 395 23 57 83
208 34 
22 Chris 1 t 371 21 60 84
234 37 
59 Andrew 1 t 420 27 60 105
250 30 
26 Brad 1 t 376 28 66 110
259 37 
31 Xavier 1 f 423 31 59 92
224 37 
37 Alex 1 t 409 21 56 111
272 37 
54 Steven 1 t 412 31 79 90
244 38 
47 Brandon 1 t 407 22 69 102
226 36 
51 Nathan 1 f 409 20 62 88
265 36 
57 Jake 1 f 373 27 78 101
223 36 
55 Matt 1 t 375 32 61 104
247 35 
23 Jake 1 t 392 25 56 82
219 37 
30 Erasmo 1 t 434 34 26 102
270 35 
34 C.J. 1 f 408 25 69 87
235 35 
45 Enny 1 f 391 26 63 106
211 35 
33 Drew 1 f 385 28 75 98
226 39 
49 Kirby 1 t 359 22 59 129
237 39 
40 J.P. 2 t 612 39 114 163
393 99 28 2 
46 Luke 2 t 593 56 124 191
371 201 38 0 
44 Rene 2 t 670 39 94 158
438 62 1 3 
1 Tim 4 t 630 44 98 157
390 155 29 2 
13 Asdrubal 6 t 680 46 100 127
455 43 7 4 
11 Logan 4 t 547 46 107 142
391 100 0 3 
2 Nick 4 t 1065 47 76 214
496 157 32 4 
21 James 3 t 638 56 97 217
397 103 29 1 
3 Evan 5 t 624 61 102 140
442 63 16 3 
36 Richie 3 t 658 36 81 143
419 63 0 2 
5 Brandon 1 t 410 30 66 80
254 39 
39 Kevin 1 t 414 34 63 84
238 35 
27 Mikie 1 t 388 24 65 89
238 33 
7 Daniel 1 t 384 23 61 89
259 35 
24 Grady 1 t 371 29 68 106
224 38 
20 Steven 1 t 406 16 54 103
247 35 
-1

1 个答案:

答案 0 :(得分:0)

由于您的输入始终以“-1”结束每个名册的数据,因此您当前的代码正在调用Roster.clear() - 在填充数据后立即清除Roster对象。这就是为什么你的团队名单总是空的一个原因。

此外,您正在为每个团队重复使用相同的Roster对象。每个团队都需要自己的名单。

要解决这两个问题,请将Roster.clear()来电替换为:

Roster = new HashMap<Integer, Player>();

这将确保你为每个名册都有一个新的名册地图,并且你永远不会清空名单。