数组计数逻辑错误

时间:2015-02-25 16:09:07

标签: java arrays if-statement for-loop

对代码进行了一些编辑,试图找出为什么我的X' s [-1]没有被包含在找到该行的平均值中。这是我的平均值。知道为什么不计算我的-1'

输出[预期]:

USER INPUT: 3
O O O 
X X X
X X X 

TOTAL OPENNESS OF [I][J] = 1
TOTAL OPENNESS OF [I][J+1] = 2
TOTAL OPENNESS OF [I][J+2] = 1
TOTAL SUM AVERAGE FOR THAT ROW = 1.3
HOWEVER..FOR ROW 2 AND ROW 3 
TOTAL SUM AVERAGE FOR THOSE ROWS = 0  
WHICH IS INCORRECT IT SHOULD = -1



public static void openfactor(char[][] mazeValue, int n){

       for(int i = 1; i<=n; i++)
       {  
           double rowAvg=0;
           double totalRowAvg=0;
           for(int j=1;j<=n;j++)
          {

              int count=0;
              int totalOpeness=0;
              int totalRowOpeness = 0;
              //double rowAvg=0;

               if(mazeValue[i][j]=='X'){
                   System.out.println("tHIS IS AN X FOR : [" + i + "]" +"[" + j + "] IS -1 ");
                   count = -1;
               }

              else 
               {
               //YOU NEED TO VERIFY THAT J IS NOT OUT OF BOUND
               if( j-1>=1)
                    {
               if(mazeValue[i][j-1]=='O')
                        count++;
                    }
                      // System.out.println("cout: "+count);

                    if(i-1>=1 && j-1>=1)
                    {
                    if(mazeValue[i-1][j-1]=='O')
                        count++;
                    }
                     //  System.out.println("cout: "+count);
                     if(i-1>=1)
                    {
                    if(mazeValue[i-1][j]=='O')
                        count++;
                     }
                    //   System.out.println("cout: "+count);
                    if(j+1<=n)
                    {
                    if(mazeValue[i][j+1]=='O')
                        count++;
                    }
                     //  System.out.println("cout: "+count);
                    if(j+1<=n && i+1<=n)
                    {
                    if(mazeValue[i+1][j+1]=='O')
                        count++;
                    }
                    if (i+1<=n)
                    {
                    if(mazeValue[i+1][j]=='O')
                        count++;
                    }
                    //   System.out.println("cout: "+count);
                    if(j-1>=1 && i+1<=n)
                    {
                    if(mazeValue[i+1][j-1]=='O')
                        count++;
                    }
                    if(i-1>=1 && j+1<=n)
                    {
                    if(mazeValue[i-1][j+1]=='O')
                        count++;
                    }
                     //  System.out.println("cout: "+count);
            totalOpeness = totalOpeness +count;
            System.out.println("TOTAL OPENESS FOR : [" + i + "]" +"[" + j + "]  IS " +totalOpeness);
            totalRowOpeness = totalRowOpeness + totalOpeness;
            //}//eND OF iF CONDITION\
            }
               
            rowAvg = (double)totalRowOpeness/(double)n;
            System.out.println("ROW AVERAGE: "+rowAvg);
            totalRowAvg = totalRowAvg + rowAvg;
            System.out.println("SUM ROW AVERAGE: "+totalRowAvg);
         }
        System.out.println("TOTAL SUM ROW AVERAGE: " +totalRowAvg);
      }
   }
    public static void printMaze(char mazeValue[][]) {
    System.out.println("MAZE");
    for (int i = 1; i < mazeValue.length; i++) {
        for (int j = 1; j < mazeValue[i].length; j++) {
            System.out.printf("%5c", mazeValue[i][j]);
        }
        System.out.printf("\n");
    }
  }
  public static void main(String[] args) {
    // TODO code application logic here
    Scanner kbd = new Scanner(System.in);
    System.out.println("ENTER A SINGLE INTEGER: ");
    int n = kbd.nextInt();
    char[][] mazeValue = new char[n + 1][n + 1];
    System.out.println("ENTER A PATH: ");
    for (int i = 0; i < mazeValue.length; i++) {
        for (int j = 0; j < mazeValue[i].length; j++) {
            if (i == 0 || j == 0 || i == n + 1 || j == n + 1)
                mazeValue[i][j] = 'X';
            else {
                mazeValue[i][j] = kbd.next().charAt(0);
            }
        }
    }
    printMaze(mazeValue);
    horizontalPath(mazeValue, n);
    System.out.println(" ");
    verticalPath(mazeValue,n);
    System.out.println(" ");
    openfactor(mazeValue, n);
 }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

我不完全明白你想要完成什么,但我会假设你想要找到重复的值,使用下面的一些搜索算法做这个是二进制搜索的一个例子。希望它有所帮助。

      import java.util.Scanner;

   class BinarySearch 
  {
  public static void main(String args[])
  {
    int c, first, last, middle, n, search, array[];

    Scanner in = new Scanner(System.in);
    System.out.println("Enter number of elements");
    n = in.nextInt(); 
    array = new int[n];

    System.out.println("Enter " + n + " integers");


    for (c = 0; c < n; c++)
      array[c] = in.nextInt();

    System.out.println("Enter value to find");
    search = in.nextInt();

    first  = 0;
    last   = n - 1;
    middle = (first + last)/2;

    while( first <= last )
    {
      if ( array[middle] < search )
        first = middle + 1;    
      else if ( array[middle] == search ) 
      {
        System.out.println(search + " found at location " + (middle + 1) + ".");
        break;
      }
      else
         last = middle - 1;

      middle = (first + last)/2;
   }
   if ( first > last )
      System.out.println(search + " is not present in the list.\n");
  }
    }

答案 1 :(得分:0)

这是您的请求的完整代码。你需要重新排序你的if语句你的逻辑是正确的: 这是输出:

    MAZE
    O    O    X
    O    O    O
    X    X    O
TOTAL OPENESS FOR : [0][0]  IS 3
TOTAL OPENESS FOR : [0][1]  IS 4
THERE IS AN X HERE FOR : [0][2]  
Average of O's in this row is : 66.66667%
TOTAL OPENESS FOR : [1][0]  IS 3
TOTAL OPENESS FOR : [1][1]  IS 5
TOTAL OPENESS FOR : [1][2]  IS 3
Average of O's in this row is : 100.0%
THERE IS AN X HERE FOR : [2][0]  
THERE IS AN X HERE FOR : [2][1]  
TOTAL OPENESS FOR : [2][2]  IS 2
Average of O's in this row is : 33.333336%

这里是代码:

 import java.util.Scanner;
public class sof {



public static boolean IsOutOfBound(int i, int j, int n)
{
if (i-1<1 || j-1<1 || i+1>n || j+1>n)
return true;
else
return false;

}

public static void openfactor(char[][] mazeValue, int n)
   {


   for(int i = 0; i<n; i++)
   {      

       int TotalCounts=0;
       for(int j=0;j<n;j++)
      {

          int count=0;


           if(mazeValue[i][j]=='X'){
               System.out.println("THERE IS AN X HERE FOR : [" + i + "]" +"[" + j + "]  ");
               //TotalCounts--;
           }

           else 
           {
           //YOU NEED TO VERIFY THAT J IS NOT OUT OF BOUND

           if( j-1>=0)
                {
           if(mazeValue[i][j-1]=='O')
                    count++;
                }
                  // System.out.println("cout: "+count);

                if(i-1>=0 && j-1>=0)
                {
                if(mazeValue[i-1][j-1]=='O')
                    count++;
                }
                 //  System.out.println("cout: "+count);
                 if(i-1>=0)
                {
                if(mazeValue[i-1][j]=='O')
                    count++;
                 }
                //   System.out.println("cout: "+count);
                if(j+1<n)
                {
                if(mazeValue[i][j+1]=='O')
                    count++;
                }
                 //  System.out.println("cout: "+count);
                if(j+1<n && i+1<n)
                {
                if(mazeValue[i+1][j+1]=='O')
                    count++;
                }
                if (i+1<n)
                {
                if(mazeValue[i+1][j]=='O')
                    count++;
                }
                //   System.out.println("cout: "+count);

                if(j-1>=0 && i+1<n)
                {
                if(mazeValue[i+1][j-1]=='O')
                    count++;
                }
                if(i-1>=0 && j+1<n)
                {
                if(mazeValue[j+1][i-1]=='O')
                    count++;
                }
                 //  System.out.println("cout: "+count);

                //totalOpeness = totalOpeness +count;
        System.out.println("TOTAL OPENESS FOR : [" + i + "]" +"[" + j + "]  IS " + count);
        TotalCounts++;



                }//END OF else CONDITION
            }//End of J loop
             float Average = ((float)TotalCounts/(float)n) * 100;
             System.out.println("Average of O's in this row is : " + Average+ "%");
       }//End of I loop

       }





    public static void printMaze(char mazeValue[][],int n) {
    System.out.println("MAZE");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            System.out.printf("%5c", mazeValue[i][j]);
        }
        System.out.printf("\n");
    }
}
    public static void main(String[] args) {
    // TODO code application logic here
    // TODO code application logic here
    Scanner kbd = new Scanner(System.in);
    System.out.println("ENTER A SINGLE INTEGER: ");
    int n = kbd.nextInt();
    char[][] mazeValue = new char[n][n];
    System.out.println("ENTER A PATH: ");
    for (int i = 0; i <n; i++) {
        for (int j = 0; j < n; j++) {
            //if (i == 0 || j == 0 || i == n + 1 || j == n + 1)
             //   mazeValue[i][j] = 'X';
           // else {
                mazeValue[i][j] = kbd.next().charAt(0);
           // }
        }
    }
    printMaze(mazeValue,n);
    openfactor(mazeValue, n);
}
}