Java:迭代两个堆栈

时间:2015-12-15 23:11:34

标签: java iterator stack

我写了一个关于游戏模拟的程序,其中一个纸牌游戏中的两个玩家P1和P2每个被给予10张编号为1-10的牌。他们每个人都需要按任意顺序排列他们的牌,并将他们面朝下放在他的堆里。然后每个玩家从他的堆中取出最顶层的牌并将其与对手进行比较。拥有较大牌的玩家获胜。当玩家没有更多的牌时,得分较高的牌将赢得比赛。

我必须使用Stack来实现该程序,除了游戏的获胜者被错误地显示之外,一切都能正常运行。以下是问题所在的示例:

第1人的输入值: 2,4,9,10,1,7,3,8,5,6

第2个人的输入值: 7,9,8,2,10,5,1,6,3,4

示例输出:

人1获胜! 人1获胜! 人1获胜! 人1获胜! 人1获胜! 人2获胜! 人1获胜! 人1获胜! 人2获胜! 人2获胜!

玩家2是赢家!

它必须实际显示人1作为获胜者,但我不知道为什么人2被显示为获胜者。

以下是代码:

  package stacks;
  import java.util.*;
  public class Ques3 {

public static void main(String[]args){
int i,j;

    Scanner sc= new Scanner(System.in);

    Stack<Integer> p1= new Stack<Integer>();

    Stack<Integer> p2= new Stack<Integer>();

    int count1=0;
    int count2=0;



    System.out.println("Person 1: ");

    for(i=0; i<10; i++){
    p1.push(sc.nextInt());
    }

    System.out.println("p1: "+p1);


    System.out.println("Person 2: ");
    for(j=0; j<10;j++){
        p2.push(sc.nextInt());
    }
    System.out.println("p2: "+p2);

    Iterator<Integer> it1 = p1.iterator();
    Iterator<Integer> it2=  p2.iterator(); 

    while (it1.hasNext() && it2.hasNext()) {
        if(p1.pop()>p2.pop()){
            System.out.println("Person 1 wins!");
            count1++;
            }

        else
            System.out.println("Person 2 wins!");
            count2++;

    }

    if(count1>count2){
        System.out.println("Player 1 is the winner!");}
    else
        System.out.println("Player 2 is the winner!");

  }

 }

1 个答案:

答案 0 :(得分:2)

您需要在else子句周围添加括号。现在,count2 ++正在else块之外发生,无论if条件如何。

else {
    System.out.println("Person 2 wins!");
    count2++;
}