0

2 つのクラス間で値を渡したいのですが、次のエラーが発生します。

トークン ";" の構文エラー、別のクラスから呼び出された値を初期化するときに予想される

初期値を持つクラス

public class Game extends Activity implements OnClickListener{

    RandomMathQuestionGenerator question = new RandomMathQuestionGenerator();
    private static final String TAG= "Sudoku";

    public static final String KEY_DIFFICULTY = 
            "org.example.sudoku.difficulty";
    public static final int DIFFICULTY_NOVICE = 1;
    public static final int DIFFICULTY_EASY = 2;
    public static final int DIFFICULTY_MEDIUM = 3;
    public static final int DIFFICULTY_GURU = 4;

    public int value = 0;

    private GameView gameView;  

    public Game()
    {
       if (KEY_DIFFICULTY == String.valueOf(1))
        {
            value = 2; 
        }
        else if (KEY_DIFFICULTY == String.valueOf(2))
        {
            value = 3;        
        }
        else if (KEY_DIFFICULTY == String.valueOf(3))
        {
            value = 4;
        }
        else if (KEY_DIFFICULTY == String.valueOf(4))
        {
            value = 6;
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");    



    }
    @Override
    public void onClick(View v) 
    {           
          //code here       
    }
}

値を呼び出すクラス

public class RandomMathQuestionGenerator {

Game num = new Game();
int number = 0;
number = num.Game(value);
//public int number = 0;
//number = num.Game(number); 


private static final int NUMBER_OF_QUESTIONS = 1;
    private static final int MIN_QUESTION_ELEMENTS = 2;
    private final int MAX_QUESTION_ELEMENTS = number;
    private static final int MIN_QUESTION_ELEMENT_VALUE = 1;
    private static final int MAX_QUESTION_ELEMENT_VALUE = 100;
    private final Random randomGenerator = new Random();    

    //rest of irrelevant code below
    }
4

3 に答える 3

2

構文エラーは、長期的には無関係です。

Androidでは、インテントを使用してアクティビティを開始する必要があります。(この開発者ガイドの記事を参照してください。) ゲームの使用を開始する場合:

Intent intent = new Intent(this, Game.class);
startActivity(intent);

また、 (変更不可)KEY_DIFFICULTYとして宣言します:final

public static final String KEY_DIFFICULTY = "org.example.sudoku.difficulty";

したがって、次のいずれの場合でも、if-else ブロックが true になることはありません。

if (KEY_DIFFICULTY == String.valueOf(1))

また、Java で文字列を比較するには、を使用する必要があり、不正確な結果が得られます。( Java で文字列を比較するにはどうすればよいですか? )equals()==


あるアクティビティから別のアクティビティに難易度を渡したい場合は、インテントのエクストラ、publicクラス変数、またはAndroid アプリケーションのアクティビティ間でデータを渡すにはどうすればよいですか? にある別のアプローチを使用します。


追加
質問にコードを追加しただけで、循環ロジックがあります。

- When you create RandomMathQuestionGenerator object, you will create a Game object
    - When you create Game object, you will create a RandomMathQuestionGenerator object
        - When you create RandomMathQuestionGenerator object, you will create a Game object
            - When you create Game object, you will create a RandomMathQuestionGenerator object
                - When you create RandomMathQuestionGenerator object, you will create a Game object
                    - When you create Game object, you will create a RandomMathQuestionGenerator object
                        - When you create RandomMathQuestionGenerator object, you will create a Game object
                            - When you create Game object, you will create a RandomMathQuestionGenerator object
                                - ...

これは、アプリが StackOverflowException をスローした場合にのみ停止します。

于 2013-03-04T21:15:07.720 に答える
0
number = num.Game(value);

Game(int value)あなたのGameクラスにはメソッドがありません。クラスでこのメソッドを作成する必要があります。

public int Game(int value){
   //code
}

また、メソッドにクラスと同じ名前を付けることができるかどうかもわかりません。署名に戻り値があるという事実は有効だと思いますが、とにかくクラスと同じメソッド名を持つのは悪い習慣です。

于 2013-03-04T21:14:42.670 に答える
0

ケース - で<init>

これが私の変更された提案されたコードですRandomMathQuestionGenerator

public class RandomMathQuestionGenerator {
  private Game num;
  private int number;

  public RandomMathQuestionGenerator() {
    num = new Game();
    number = num.value;
    // Existing code here
  }
  // Existing code here
}

ケース - メソッド コード内

Game num = new Game();
int number = num.value;

ここに問題があります:

  • public Game-public変数修飾子ではなくフィールド修飾子であり、メソッド コードの途中では無効です。は有効な修飾子であることに注意してください。これは、変数を再割り当てするとコンパイル エラーになることを意味します。final
  • プレースホルダー値を使用して数値を作成し、それに割り当てます-0決して使用されません
  • num にはメソッド Game がなく、このコードでは value が定義されていません。value は、num が 1 である Game オブジェクトのプロパティです。この変数の名前を変更することを強くお勧めします - おそらくgameInstうまくいくでしょう。

概要

(進行中)

于 2013-03-04T21:14:49.713 に答える