首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的程序做一个额外的循环,如何修复?

我的程序做一个额外的循环,如何修复?
EN

Stack Overflow用户
提问于 2016-05-05 16:14:46
回答 5查看 109关注 0票数 1

我正在编写一个更高层次的纸牌游戏。目标是猜测第二张卡片是大的还是小的。除了一个问题外,这个程序运行得很好。在游戏中,玩家从5学分开始。每猜一次,他最多得10分,或者如果他没有猜到,他会损失1分,降到0分。在0或10岁的时候,他应该得到你的胜利!否则你就输了!信息,他这样做,但问题是,程序做了额外的抽签无论如何之后。

我首先使用了 then 循环,然后尝试了do then循环,但问题是相同的。

以下是主要的方法:

代码语言:javascript
复制
 public static void main(String[] args)
      {
         HigherLower h = new HigherLower();

         boolean higher;  // higher = true; lower = false

         Draw draw = new Draw(); Deck deck = new Deck(); 
         Card card1; Card card2;

         int credits = 5;

         boolean playing = true;

         while(playing)
         {
             if(credits == 0)
             {
                 System.out.println("\nYou lose !");
                 playing = false;
             }
             else if(credits == 10)
             {
                 System.out.println("\nYou win !");
                 playing = false;
             }

             System.out.println("\n\n\n\n NEW DRAW : ");
             card1 = draw.drawCard(deck);

             System.out.print(card1.getName());

             boolean choice = h.getRightInput();

             card2 = draw.drawCard(deck);

             if((card2.getValue() > card1.getValue() && choice == true) 
            || (card2.getValue() < card1.getValue() && choice == false))
             {
                 credits++;
                 System.out.printf("Second card is %s", card2.getName());
                 System.out.printf("\n\nYou guessed right ! "
                        + "Now you have %d credits", credits);
             }
             else
             {
                 credits--;
                 System.out.printf("Second card is %s", card2.getName());
                 System.out.printf("\n\nYou guessed wrong ! "
                        + "Now you have %d credits", credits);
             }




         }


      }

下面是其他的课程,我会把它们堆在一起:

代码语言:javascript
复制
       public class Card 
        {
               String name;
               int value;

            Card(String name, int value)
            {
                this.name = name;
                this.value = value;
            }

            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public int getValue() {
                return value;
            }
            public void setValue(int value) {
                this.value = value;
            }
        }

public class Deck 
    {
        Card Joker = new Card("Joker", 1); 
        Card Two = new Card("2", 2);
        Card Three = new Card("3", 3);
        Card Four = new Card("4", 4);
        Card Five = new Card("5", 5);
        Card Six = new Card("6", 6);
        Card Seven = new Card("7", 7);
        Card Eight = new Card("8", 8);
        Card Nine = new Card("9", 9);
        Card Ten = new Card("10", 10);
        Card Jack = new Card("J", 11);
        Card Queen = new Card("Q", 12);
        Card King = new Card("K", 13);
        Card Ace = new Card("A", 14);

        Card[] deck = new Card[]{Joker, Two, Three, Four, Five,
                                 Six, Seven, Eight, Nine, Ten, 
                                 Jack, Queen, King, Ace};

    }


import java.util.Random;

public class Draw 
{

     Random random = new Random();

     public Card drawCard(Deck deck)
     {
         int maxNumber = deck.deck.length  ;

         int draw = random.nextInt(maxNumber);

         Card drawedCard = deck.deck[draw];

         return drawedCard;

     }


}

public class HigherLower 
{

     Scanner sc = new Scanner(System.in);

     public boolean getRightInput()
     {
         while(true)
         {
         System.out.println("\n (H)igher or (L)ower ? ");

         String s = sc.next();
         char c = s.charAt(0);

            if(c == 'H' || c == 'h')
            {
                return true;
            }
            else if(c == 'L' || c == 'l')
            {
                return false;
            }
            else
            {
                System.out.println("Give valid input ! H or L");
            }

         }

     }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-05 16:19:01

玩家以5分开始游戏,这意味着游戏一开始就不会结束。你应该翻转你的循环的部分-首先执行绘图,然后检查游戏是否结束:

代码语言:javascript
复制
 while (playing) {
     // Code to do another drawing

     if (credits == 0) {
         System.out.println("\nYou lose !");
         playing = false;
     } else if (credits == 10) {
         System.out.println("\nYou win !");
         playing = false;
     }
}
票数 1
EN

Stack Overflow用户

发布于 2016-05-05 16:19:28

移动你的胜利,你就输到循环的底部。

代码语言:javascript
复制
     while(playing)
         {

             System.out.println("\n\n\n\n NEW DRAW : ");
             card1 = draw.drawCard(deck);

             System.out.print(card1.getName());

             boolean choice = h.getRightInput();

             card2 = draw.drawCard(deck);

             if((card2.getValue() > card1.getValue() && choice == true) 
            || (card2.getValue() < card1.getValue() && choice == false))
             {
                 credits++;
                 System.out.printf("Second card is %s", card2.getName());
                 System.out.printf("\n\nYou guessed right ! "
                        + "Now you have %d credits", credits);
             }
             else
             {
                 credits--;
                 System.out.printf("Second card is %s", card2.getName());
                 System.out.printf("\n\nYou guessed wrong ! "
                        + "Now you have %d credits", credits);
             }

             if(credits == 0)
             {
                 System.out.println("\nYou lose !");
                 playing = false;
             }
             else if(credits == 10)
             {
                 System.out.println("\nYou win !");
                 playing = false;
             }




         }
票数 0
EN

Stack Overflow用户

发布于 2016-05-05 16:20:31

代码语言:javascript
复制
while(playing)
         {
             if(credits == 0)
             {
                 System.out.println("\nYou lose !");
                 playing = false;
                 break;
             }
             else if(credits == 10)
             {
                 System.out.println("\nYou win !");
                 playing = false;
                 break;
             }

如果满足条件,可以考虑中断循环。移动条件将不会做任何事情,它将打印额外的数据无论如何。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37055377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档