【问题标题】:Array count logic error数组计数逻辑错误
【发布时间】:2015-02-25 16:09:06
【问题描述】:

对代码进行了一些编辑,以尝试找出为什么我的 X 的 [-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);
 }
}

【问题讨论】:

    标签: java arrays if-statement for-loop


    【解决方案1】:

    我不完全理解你想要完成什么,但我假设你想要找到重复的值,使用下面的一些搜索算法来做到这一点是二分搜索的一个例子。希望对您有所帮助。

          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");
      }
        }
    

    【讨论】:

    • 不,你不需要二分搜索。
    【解决方案2】:

    这是您请求的完整代码。你需要重新排序你的 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);
    }
    }
    

    【讨论】:

    • 第一次循环后需要重新设置count和totalOpeness的值
    • 好的,有道理。
    • 我的机器上没有安装 java 这就是为什么我要求输出和其他东西,我会尝试使用 JFiddler 或类似的东西
    • 那太棒了,我无法告诉你我在我的程序这部分卡住了多久。
    • 你需要添加更多的if语句,你需要有9个条件来验证位置。我稍后会查看它们
    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多