2015-11-04 70 views
0

在我的项目的目标是创造球队联赛,并有各队的花名册。我应该使用2个不同的地图。一张地图用于将团队名称保存为一个字符串,以及它的对象(团队)。另一张地图是用数字和对象(玩家)来保存名册。每当我运行这段代码,并尝试测试名单是否打印出正确的数字时,我遇到了一个问题。名册似乎清楚了整个。我知道我已经加入了一个Roster.clear()方法,但是这是为了重新设置名单,让其他球队的球员进来。如果你需要球队班,我会把它放在最后。非常感谢,如果有人能够回答我的问题。HashMap中删除本身是一个HashMap

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

Team类:

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 
+0

您的扫描仪输入是否以“-1”标记结束? – cybersam

+0

另外,你是否正在更新'Roster'对象,实际上是'League'中任何'Team'集合中的一个名单? – cybersam

+0

@cybersam是的,每个团队结束后都会以“-1”结束。在这里,我将发布我正在阅读的文件,以举例说明。另外,我不确定你最后一个问题的含义,但我认为是。 –

回答

0

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

此外,要为每一个团队一样Roster对象重新使用。每支球队都需要自己的名单。

要解决这两个问题,更换Roster.clear()呼叫搭配:

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

这将确保您的每一名册一个新的名册的地图,那你永远不会空出一个阵容。

+0

你刚从我的肩膀上拉了太多的压力,非常感谢你。 <3 –

+0

不客气。请[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)我的答案,如果它帮助你。 – cybersam