2017-03-14 8 views
0

私は、Enumクラス、Playerクラス、およびPlayerクラスを拡張するLisaというクラスを持っています。私はEnumから値(PAPER、ROCK、またはSCISSORS)をランダムに生成しようとしています。エラー: "Roshamboのプリミティブ型intには、フィールドROCKがありません。"どんなアドバイスや指針も大変ありがとうございます。それは明らかかもしれませんが、これは私の拳のJavaクラスであり、GoogleとStackoverflowの検索は役に立たなかった。ここに私がこれまでにコーディングしたものがあります:列挙型からランダムな値を呼び出すJava(更新済み)

更新:すべての支援に感謝します。私は以下の私の全プログラムを更新しました。私は誰もがゲームの勝者/敗者を決定するためのロジックを実装する最良の方法/場所を提案できるかどうか疑問に思っていましたか?ここでは、完全なコードは次のとおりです。

MAIN

package gameOfRoshambo; 
import java.util.Scanner; 
public class RoshamboApp { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Welcome to Roshambo!"); 
    System.out.println("Enter your name:"); 

    //Create a new payer 
    Player1 player1 = new Player1(); 
    String name = sc.nextLine(); 
    player1.setName(name); 

    String choice = "y"; 
    while (choice.equalsIgnoreCase("y")) { 
     System.out.println("Hello " + name + ". " + "Would you like to play against Bart or Lisa? (B/L)"); 
     String opponent = sc.next(); 

      if(opponent.equalsIgnoreCase("B")){ 
       //Create a new Bart opponent 
       Bart bart = new Bart(); 
       System.out.println(player1.getName() + ": " + player1.getChoice()); 
       System.out.println("Bart: " + bart.getRoshambo()); 

      } 
      else if (opponent.equalsIgnoreCase("L")){ 
       //Create a new Lisa opponent 
       Lisa lisa = new Lisa(); 
       System.out.println(player1.getName() + ": " + player1.getChoice()); 
       System.out.println("Lisa: " + lisa.getRoshambo()); 

      } 

     // Ask user if they want to continue 
     System.out.print("Continue? (y/n): "); 
     choice = sc.next(); 
     System.out.println(); 
    } 

    //Close Scanner 
    System.out.println("Thanks for playing! Goodbye!"); 
    sc.close(); 
} 

} 

ENUM

package gameOfRoshambo; 
public enum Roshambo 

{ROCK, PAPER, SCISSORS; 

public String toString() { 
    switch(this) { 
     case ROCK: return "Rock"; 
     case PAPER: return "Paper"; 
     case SCISSORS: return "Scissors"; 
     default: throw new IllegalArgumentException(); 
    } 
    } 
} 

PLAYER

package gameOfRoshambo; 
abstract class Player { 
String name; 
Roshambo roshambo; 

abstract int generateRoshambo(); 

public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public Roshambo getRoshambo() { 
    return roshambo; 
} 
public void setRoshambo(Roshambo newRoshambo) { 
    roshambo = newRoshambo; 
} 
} 

PLAYER1

package gameOfRoshambo; 
import java.util.Scanner; 

public class Player1 extends Player{ 

String player1 = ""; 

public Player1(){ 
    super(); 
    } 

Scanner scan = new Scanner(System.in); 

public Roshambo getChoice(){ 
    System.out.println("Enter Choice: Paper, Rock, Scissors (r/p/s): "); 
    char playerChoice = scan.nextLine().toUpperCase().charAt(0); 

    switch (playerChoice){ 
     case 'R': 
      return Roshambo.ROCK; 
     case 'P': 
      return Roshambo.PAPER; 
     case 'S': 
      return Roshambo.SCISSORS; 
     } 
    System.out.println("Invalid input!"); 
return getChoice(); 
} 

public String getPlayer1() { 
    return player1; 
} 

public void setPlayer1(String player1) { 
    this.player1 = player1; 
} 

@Override 
int generateRoshambo() { 
    // TODO Auto-generated method stub 
    return 0; 
} 
} 

BART

package gameOfRoshambo; 
public class Bart extends Player { 

public Bart(){ 
    super(); 
} 

public Roshambo getRoshambo(){ 
    return Roshambo.ROCK; 
    } 

@Override 
int generateRoshambo() { 
    // TODO Auto-generated method stub 
    return 0; 
} 
} 

LISA

package gameOfRoshambo; 
import java.util.Random; 
public class Lisa extends Player { 
private Random rand; 

public Lisa(){ 
    super(); 
    rand = new Random(); 
} 

public Roshambo getRoshambo(){ 
    int shoot = rand.nextInt(3); 
    return Roshambo.values()[shoot]; 
    } 

@Override 
int generateRoshambo() { 
    return 0; 
} 
} 
+0

...それとリサでの実装を削除することを検討)[ランド.nextInt(3)] ' – Zefick

+3

コンストラクターは' this.rand = new Random(); ' –

+1

"これを行うのに問題が発生しています "という記述は問題の説明ではありません。あなたの質問を編集し、それがいかに正確であるかを記述してください(http://importblogkit.com/2015/07/does-not-work/)。エラー/例外/予期しない出力が表示されますか? – Pshemo

答えて

1
  • あなたはRoshamboないintとしてあなたジャンケンフィールドを保存し、あなたのセッターを更新し、それに応じてゲッタ必要があります。これは、JavaでEnumをintにキャストできないためです。 nextInt()方法は、最初のを持っているので

Cast Int to enum in Java

  • フィールド名が
  • 使用Roshambo.values()[choice]
  • 1 + rand.nextInt(3);1 +を取り除く下ケースで始める必要があります。説明については、以下のスタックオーバーフローのリンクを参照してください。位置0のenum値。リサコンストラクタでそう
Roshambo.values()[0] = ROCK 
Roshambo.values()[1] = PAPER 
Roshambo.values()[2] = SCISSORS 
  • 、コンストラクタは

私は「コードスニペットを参照してくださいを終了したら、あなたが失う新しいローカル変数に代入避けるためにrand = new Random()の代わりに、​​に変更下に添付されている

プレーヤークラス

あなたが abstract int generateRoshambo()メソッドを使用していない実装の上に新しいとまた

リサクラス

package gameOfRoshambo; 

import java.util.Random; 

public class Lisa extends Player { 

    private Random rand; 

    public Lisa(){ 
     super(); 
     rand = new Random(); 
    } 

    public Roshambo getRoshambo(){ 
     int choice = rand.nextInt(3); 
     return Roshambo.values()[choice]; 
     } 

    @Override 
    int generateRoshambo() { 
     return 0; 
    } 

} 

ので `Roshambo.values(

0

あなたのフィールドRoshamboはint型です。

Roshambo roshambo; 

フィールド名を大文字にするのは悪い習慣です。この場合、フィールド名をタイプと混同しているため、混乱してしまいます。あなたのコードの他のいくつかの場所でRoshambointを置き換える必要があります。

関連する問題