2017-11-08 7 views
-1

私は単純なBlackJackゲームを文字入力で動かそうとしていますが、後の部分では多くの問題があります。Java - BlackJackプロジェクト - I/Oとサイクルに関する問題

私は悩みを与えている部分にコメントしました。残りはエラーがないように見えて、私はユニットテストをしました。 私は何をしましたか?私は描かれたカードを保持し、それらを管理するクラスを作成しました、テーブル、プレーヤー、ディーラーは両方ともテーブルのインスタンスです。 テーブルには最大5枚のカードがあります(簡単にするために)、すべてのカードオブジェクトは、カードオブジェクトにデータを追加する方法を持つCardクラスから取り出されます。

メインクラスはプログラムを駆動し、決定はキーボードからの文字入力で行われるため、その時点で問題が発生します。

import java.io.IOException; 

class Table{ 
    Card[] hand = new Card[5]; 
    int counter = 1; 

    Table() { 
     for (int i=0; i<hand.length; i++) { 
      hand[i]=new Card(); 
     } 
     hand[0].GetCard(); 


    } 

    void ReadCards(){ 
     for(int i= 0;i<counter;i++) { 
      System.out.println("The card "+(i+1)+" is " + hand[i].name + " "+ hand[i].seed + "." ); 

     } 
    } 
    void DrawCards() { 
     hand[counter].GetCard(); 
     counter++; 
    } 
    boolean isOut() { 
     int sum = 0; 
     for(int i= 0;i<counter;i++) { 
      sum += hand[i].value; 
      if(sum >21) { 
       return true; 
      } 

     } 
     return false; 
    } 

    int TheSum() { 
     int sum = 0; 
     for(int i= 0;i<counter;i++) { 
      sum += hand[i].value; 


     } 
     return sum; 
    } 

    boolean isWIN(Table p2) { 
     int sum = 0; 
     int sump2 = 0; 
     for(int i= 0;i<counter;i++) { 
      sum += hand[i].value; 


     } 
     for(int i= 0;i<p2.counter;i++) { 
      sump2 += p2.hand[i].value; 


     } 
     if (sum>sump2) { 
      return true; 
     } 
     else return false; 
    } 



    class Card { 
     public int value = 0; 
     public String name = ""; 
     public String seed = ""; 



     void GetCard(){ 
      int positive = 0; 
      do { 
       positive = (int) (Math.random()*100) % 10; 
      }while(positive == 0); 
      value = positive; 
      if(value<10) { 
       name = String.valueOf(value); 
      } 
      else { 
       positive = 0; 
       do { 
        positive = (int) (Math.random()*100) % 3; 
       }while(positive == 0); 
       switch(positive) { 
       case 1: 
        name = "J"; 
        break; 
       case 2: 
        name = "Q"; 
        break; 
       case 3: 
        name ="K"; 
        break; 

       } 


      } 
      positive = 0; 
      do { 
       positive = (int) (Math.random()*100) % 4; 
      }while(positive == 0); 
      switch(positive) { 
      case 1: 
       seed = "CLUB"; 
       break; 
      case 2: 
       seed = "DIAMOND"; 
       break; 
      case 3: 
       seed ="SPADE"; 
       break; 
      case 4: 
       seed ="HEART"; 
       break; 
      } 

     } 
    } 
} 



public class BlackJack { 
    public static void main(String args[])throws IOException { 


     System.out.println("Welcome to the BlackJack's table! Press y to start! "); 
     char flag; 
     do { 
     flag = (char)System.in.read(); 

     }while(flag != 'y'); 
     Table dealer = new Table(); 
     Table player = new Table(); 
     System.out.println("DEALER"); 
     dealer.ReadCards(); 
     System.out.println("PLAYER"); 
     player.ReadCards(); 
     flag = ' '; 
     System.out.println("Do you want to draw a card? I'll draw until you'll press n"); 
/* 
     flag = (char)System.in.read(); 
     while(flag != 'n') { 
      player.DrawCards(); 
      player.ReadCards(); 
      if (player.isOut()) { 
       System.out.println("YOU LOSE"); 
       System.exit(0); 
      } 
      flag = (char)System.in.read(); 
     } 
     System.out.println("The dealer will draw"); 
     while(dealer.TheSum()<18) { 
      dealer.DrawCards(); 
      dealer.ReadCards(); 
      if (dealer.isOut()) { 
       System.out.println("YOU WIN"); 
       System.exit(0); 
      } 
     } 
*/ 
     System.out.println("WHO WON?"); 

     if (player.isWIN(dealer)){ 
      System.out.println("YOU WIN"); 
     } 
     else System.out.println("YOU LOSE"); 

    } 
} 

はい、私はjavaに慣れていません。 Console screenshot of the output here!

+0

だけの質問は、これは割り当てのためにありますか?または個人学習のため。 – corsiKa

+0

あなたは[ask]とhttps://ericlippert.com/2014/03/05/how-to-debug-small-programs/を見てください。 – pvg

+0

個人学習、私は数年間Javaを避けました、一週間前に買った本と私はここにいる。 私は主に私が間違ったI/Oメソッドを使用しているのかと疑問に思っています。なぜなら、あまりにも多くのメソッドがあり、私はすでにC++、C#、Pythonがありません。 – Daru

答えて

0

ここではループの問題を修正する例を示しますが、ゲームロジックに問題がある可能性がありますが、これはこの問題の範囲外です。

public static void main(String args[]) throws IOException { 
     Scanner s = new Scanner(System.in); 
     System.out.println("Welcome to the BlackJack's table! Press y to start! "); 
     char flag; 
     do { 
      flag = (char) s.nextLine().charAt(0); 

     } while (flag != 'y'); 
     Table dealer = new Table(); 
     Table player = new Table(); 
     System.out.println("DEALER"); 
     dealer.ReadCards(); 
     System.out.println("PLAYER"); 
     player.ReadCards(); 
     flag = ' '; 
     System.out.println("Do you want to draw a card? I'll draw until you'll press n"); 

     while (true) { 
      flag = s.nextLine().charAt(0); 

      if (flag == 'n') { 
       break; 
      } 

      player.DrawCards(); 
      player.ReadCards(); 
      if (player.isOut()) { 
       System.out.println("YOU LOSE"); 
       System.exit(0); 
      } 
      System.out.println("The dealer will draw"); 
      while (dealer.TheSum() < 18) { 
       dealer.DrawCards(); 
       dealer.ReadCards(); 
       if (dealer.isOut()) { 
        System.out.println("YOU WIN"); 
        System.exit(0); 
       } 
      } 

      System.out.println(String.format("The dealer has finished drawing. Dealers score %d. Your score %d", dealer.TheSum(), player.TheSum())); 
     } 

     System.out.println("WHO WON?"); 

     if (player.isWIN(dealer)) { 
      System.out.println("YOU WIN"); 
     } else { 
      System.out.println("YOU LOSE"); 
     } 
    } 

出力:

Welcome to the BlackJack's table! Press y to start! 
y 
DEALER 
The card 1 is 8 CLUB. 
PLAYER 
The card 1 is 2 SPADE. 
Do you want to draw a card? I'll draw until you'll press n 
n 
WHO WON? 
YOU LOSE 
+0

ええ、ゲームにいくつかの問題があるかもしれませんが、結局のところゲーム自体はほとんど分かりません。私は今考えていたより簡単なことです。プログラムは、それ以外の何かを押すと、クラッシュ、nはディーラーのターンをジャンプします。 なぜ文字入力を得るのが難しいのだろうと思います。 – Daru

+0

文字を入力する必要があります。ちょうどEnterキーを押すと、最初の文字を見るcharAt(0)を使用するので、範囲外のインデックスを取得します。 – user

関連する問題