2017-04-15 4 views
1

私は、2層の多次元配列が対角、垂直、または水平のいずれかの方法で4つの等しい値を1行に持つ場合、読み込みと罰金を科せられるプログラムクラスをコーディングしています。ここに私のコードです。興味深いループとブール

public static boolean isConseccutiveFour (int[][] matrix){ 
    //creates a boolean to give answer later on 
    boolean connection = true; 
    int[][] consecFour = matrix; 
    //incrementing for loops that move through the two arrays by going horizontally then diagonally 
    for (int Y = 0; Y < consecFour.length - 3; Y++){ 
     for(int X= 0; X < consecFour[0].length - 3; X++){ 
      //if statement used to give the proper constraints for diagonal check 
      if ((consecFour.length - Y < 3) && (consecFour[0].length - X < 3)){ 
       if (consecFour[X][Y] == consecFour[X + 1][Y + 1] && consecFour[X][Y] == consecFour[X+2][Y+2] && consecFour[X][Y] == consecFour[X+3][Y+3]) 
        connection = true; 
      } 
      //if statement used to give the proper constraints for diagonal check 
      else if ((consecFour.length - Y < 3) && (consecFour[0].length < 3)){ 
       if (consecFour[X][Y] == consecFour[X-1][Y-1] && consecFour[X][Y] == consecFour[X-2][Y-2] && consecFour[X][Y] == consecFour[X-3][Y-3]) 
        connection = true; 
      } 
      //if statement used to give the proper constraints for horizontal check 
      else if (consecFour[0].length - X < 3){ 
       if(consecFour[X][Y] == consecFour[X+1][Y] && consecFour[X][Y] == consecFour[X+2][Y] && consecFour[X][Y] == consecFour[X+3][Y]) 
        connection = true; 
      } 
      //if statement used to give the proper constraints for vertical check 
      else if (consecFour.length - Y < 3){ 
       if (consecFour[X][Y] == consecFour[X][Y + 1] && consecFour[X][Y] == consecFour[X][Y+2] && consecFour[X][Y] == consecFour[X][Y+3]) 
        connection = true; 
      } 
     } 
    } 
    //return statement of boolean value 
    return connection; 

私の現在の問題は、それが常に関係なく、中に入れて、私はこれは愚かな間違いのように見えるかもしれませんが、私は本当に間違っているものを見つけることができません知っているものは、アレイ、trueを返すないということです。このメソッドがチェックされてから、入力配列の長さが4より大きく、幅が4より大きいことを確認する前に、私の主なステートメントにはあります。これはあなたがすでに知っているようにJavaであり、答えは高く評価されます。

答えて

1

誤って接続することは決してありません。ちょうど最後にelseを追加して接続をfalseにするか、デフォルトでfalseになるように接続を作成します。

public static boolean isConseccutiveFour (int[][] matrix){ 
     //creates a boolean to give answer later on 
     boolean connection = false; 
     int[][] consecFour = matrix; 
     //incrementing for loops that move through the two arrays by going horizontally then diagonally 
     for (int Y = 0; Y < consecFour.length - 3; Y++){ 
      for(int X= 0; X < consecFour[0].length - 3; X++){ 
       //if statement used to give the proper constraints for diagonal check 
       if ((consecFour.length - Y < 3) && (consecFour[0].length - X < 3)){ 
        if (consecFour[X][Y] == consecFour[X + 1][Y + 1] && consecFour[X][Y] == consecFour[X+2][Y+2] && consecFour[X][Y] == consecFour[X+3][Y+3]) 
         connection = true; 
       } 
       //if statement used to give the proper constraints for diagonal check 
       else if ((consecFour.length - Y < 3) && (consecFour[0].length < 3)){ 
        if (consecFour[X][Y] == consecFour[X-1][Y-1] && consecFour[X][Y] == consecFour[X-2][Y-2] && consecFour[X][Y] == consecFour[X-3][Y-3]) 
         connection = true; 
       } 
       //if statement used to give the proper constraints for horizontal check 
       else if (consecFour[0].length - X < 3){ 
        if(consecFour[X][Y] == consecFour[X+1][Y] && consecFour[X][Y] == consecFour[X+2][Y] && consecFour[X][Y] == consecFour[X+3][Y]) 
         connection = true; 
       } 
       //if statement used to give the proper constraints for vertical check 
       else if (consecFour.length - Y < 3){ 
        if (consecFour[X][Y] == consecFour[X][Y + 1] && consecFour[X][Y] == consecFour[X][Y+2] && consecFour[X][Y] == consecFour[X][Y+3]) 
         connection = true; 
       } 
      } 
     } 
     //return statement of boolean value 
     return connection; 
+0

私はあなたが言ったことを行い、connection = falseにするelse文を作成しました。元の方程式は偽にも等しいですが、今はすべてが答えとして偽に戻ります。私がハードな場合でも、接続はfalseと等しくなるようにコード化されています。 – JamesJSchindler

+0

私の答えは、デフォルトではfalseにするか、else文を追加することでした。しかし、条件((consecfour.length - Y <3)&&(consecFour [0] .length - X <3) 1つの長さが1から始まり、0から始まるループであるため –

+0

です。答えは(1)〜正しい(+1)。私は助けるかもしれない説明を加えました。 – c0der

0

user7790438が正しく答えたとして、connectionはfalseに設定されることはありませんので、この方法は、唯一の真を返すことができます。それを説明するために、ここにあなたのコードのスケルトンは次のとおりです。

public static boolean isConseccutiveFour (int[][] matrix){ 

     boolean connection = true; 

     for (....){ 

       if (....){ 
         .... 
         connection = true; 
       } 

       else if (....){ 
         .... 
         connection = true; 
       } 
       else if (....){ 
         .... 
         connection = true; 
       } 

       else if (....){ 
         .... 
         connection = true; 
       }  
     } 

     return connection; 
    } 

あなたはconnection = false1どこでも見ることができますか?

関連する問題