2

SOSというゲームを作っています。3×3のボードゲームで、三目並べと同じコンセプトですが、このゲームではプレイヤーはXとOのどちらでプレイするかを選択することはできず、このゲームのルールは「SOS」を形成することだけです。

募集定員が埋まりましたら終了させて​​いただき、それぞれの「SOS」は「SOS」を結成したプレイヤーに追加させていただきます。

私の問題は得点についてです。である1行目にSOSを入力した後(- - -)、2行目1列目に「お」を入力してみたら、プレイヤー2がインクリメントします。私のプログラムでは、2番目のelse ifを満たしていないため、インクリメントしないでください。なぜそれが起こっているのですか?

これが私のコードです:

import java.util.Scanner;

public class SOS
{
  public static void main(String[] args)
{
 Scanner input = new Scanner(System.in);
 String ar[] = {"-","-","-","-","-","-","-","-","-"};
 int player1 = 0;
 int player2 = 0;
 int index = 0;

 for(int l = 0; l<3; l++)
 { 
   for(int j = 0; j<3; j++)
   {
     System.out.print(ar[j]);
   }
   System.out.print("\n");
 }

 for(int j = 0;j < 9;j++)
 {
  //Input position and letter
  System.out.println("Enter the position number: ");
  index = input.nextInt();
  input.nextLine();
  System.out.println("Enter (S or O): ");
  ar[index - 1] = input.nextLine();

  //Output for the game
  for(int l = 0; l<9; l++)
  {
    System.out.print(ar[l]);
    if(l == 2)
    {
      System.out.println();
    }
    else if(l == 5)
    {
      System.out.println();
    }
    else if(l == 8)
    {
      System.out.println();
    }
  }
  //condition
  if((ar[0]+ar[1]+ar[2]).equals("SOS")) 
  {
    if(j%2 == 0)
    {
      player1++;
      System.out.println("Player 1: "+player1+"    Player 2: "+player2);
    }
    else if( j % 2 != 0)
    {
      player2++;
      System.out.println("Player 1: "+player1+"    Player 2: "+player2);
    }
  }
  else if((ar[3]+ar[4]+ar[5]).equals("SOS"))
  {
    if(j%2 == 0)
    {
      player1++;
      System.out.println("Player 1: "+player1+"    Player 2: "+player2);
    }
    else if( j % 2 != 0)
    {
      player2++;
      System.out.println("Player 1: "+player1+"    Player 2: "+player2);
    }
  }
  else
  {
    System.out.println("Player 1: "+player1+"    Player 2: "+player2);
  }



  //end of condition

  }
  }
  }
4

1 に答える 1

2

コードのこのセクションでバグが発生しています。

if((ar[0]+ar[1]+ar[2]).equals("SOS")) 

最初のプレーヤーがこれらの位置に SOS を正しく入力した後、このステートメントは常に true になります。つまり、ネストされた if/else がすべてのターンで実行されます。

    if(j%2 == 0)
    {
      player1++;
    }
    else if( j % 2 != 0)
    {
      player2++;
    }

4 番目のターン中、j は 3 になります。(j%2 != 0) は true で、player2 をインクリメントします。

プログラムを実行し続けると、最初の if が常に true になるため、player1 と player2 がターンごとにインクリメントし続けることがわかります。

于 2013-08-28T16:07:45.780 に答える