2016-10-23 20 views
0

Othelloをjavaで作っており、enterが押されたときに他のプレイヤーに切り替えるのに問題があります。私はグローバル変数public static int counter;を宣言しました。これは押されたときに増加します。Javaグローバル変数はどのように機能しますか?

Scanner s = new Scanner(System.in); 
move = s.nextLine(); 
// enter to forfeit 
if(move.equals("")){ 
    if(counter%2 == 0){ 
     whiteEnterForfeit = turn(board, "White", "W", "B"); 
     printBoard(board); 
     counter++; 
     } 
    if(counter%2 == 1) { 
     blackEnterForfeit = turn(board, "Black", "B", "W"); 
     printBoard(board); 
     counter++; 
     } 
} 

/* If coordinate is typed like 2,4 I will be recorded at right spot on the board. 

else if(!move.equals("")){ 
    StringTokenizer st = new StringTokenizer(move, ","); 
    rowMove = Integer.parseInt(st.nextToken()); 
    colMove = Integer.parseInt(st.nextToken()); 
*/ 

私が続けて2回Enterキーを押したらだから、Black-White-Blackをプリントアウトすることになっています。しかし、鉱山はBlack-White-White.....を印刷します。 staticグローバル変数について私が考えることは、どのクラスやメソッドもその値にアクセスして変更できることです。

各プレーヤーの再生が成功すると、counterも増えます。 コードが300行以上あるので、github(https://github.com/misonam03/TIL/blob/master/Java/Othello.java)で見つけることができます。 ありがとうございます!

+0

私たちはあなたの問題を分析することができるように**こちら** SSCCE http://sscce.orgを投稿してください。 –

+0

デバッグを試したときに何を見つけましたか? – shmosel

+0

@shmosel私はeclipseを使用していて、 'red 'シグナルを表示しません。まだバグがありますか? – jaykodeveloper

答えて

2

あなたがここに再帰をHAVA、その後、あなたのカウンタが増分されることはありません飽きない:

if(counter%2 == 0){ 
    whiteEnterForfeit = turn(board, "White", "W", "B"); 
    printBoard(board); 
    counter++; 
} 

あなたがカウンターを移動する++呼び出しの前に、あなたが印刷権利を取得するが、最終的にあなたが実装方法ためにStackOverflowErrorを取得する場合再帰。

私はこのビデオシリーズがあなたに多くを助けることができると思います。これはC#GOゲームのためのものですが、あなたがやっていることに非常に似ています:Roy Osherove - Building a Go Game Engine With TDD and Pair Programming - Part 1

+0

タイアドバイス!私がここでグローバル変数を使う理由は、再帰問題を避けることであり、うまくいかないようです。 – jaykodeveloper

+0

グローバル変数が**悪い**というヒントとしてこれを取ってください!彼らはハートに問題を追跡させます。 –

0

ifの代わりにelseキーワードを使用する必要があります。これは現在、カウンタが偶数のときにインクリメントされているため、奇数になります(したがって、2番目のif文が実行されるため)。

if elseが代わりに実行されてからの両方を停止します作る
if(counter%2 == 0){ 
    whiteEnterForfeit = turn(board, "White", "W", "B"); 
    printBoard(board); 
    counter++; 
} else { 
    blackEnterForfeit = turn(board, "Black", "B", "W"); 
    printBoard(board); 
    counter++; 
} 

+0

まだ白黒 - 白 - 白が表示されます。私は、他の人の話は正しいと思います。彼は再帰を述べた – jaykodeveloper

0

私はコードをこのように書くことを好むだろう:

Scanner s = new Scanner(System.in); 
move = s.nextLine(); 
// enter to forfeit 
if(move.equals("")){ 
    if(counter%2 == 0){ 
     whiteEnterForfeit = turn(board, "White", "W", "B"); 
    } 
    if(counter%2 == 1) { 
     blackEnterForfeit = turn(board, "Black", "B", "W"); 
    } 
    printBoard(board); 
    counter++; 
} 
関連する問題