输入字符串到二维数组

时间:2020-04-11 20:34:44

标签: java arrays

尝试制作直方图,但是我尝试使用的循环却给了我一个Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 14错误。我正尝试着达成以下目标:

*       *               
*       *       *       *       
*       *   *   *       *   *   
*       *   *   *       *   *   
*       *   *   *   *   *   *   
*       *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *   *
-   -   -   -   -   -   -   -   -   -
0   1   2   3   4   5   6   7   8   9

这就是我到目前为止所拥有的:

public static void VerticalHist()
   {
      int max = 0; // initialize max

      int[] count = new int[10]; // make array to find max

      for (int i = 0; i < 100; i++)
      {
         int rand = (int)(Math.random() * ((9 - 0) + 1)); // generate random values

         count[rand]++;
      }

      for (int x : count) // find max 
      {
         if (x > max)
            max = x;
      }

      // System.out.println(max);
      String[][] nums2 = new String[max][10]; // create 2d array for histogram

      for (int x = max; x > 0; x--)
      {
         System.out.println();
         for (int i = 0; i < nums2[x].length; i++)
         {
            if (count[i] > 0)
               nums2[x][i] = "*";
         }
      }

      for (int i = 0; i < max; i++) // print 2d array
      {
         System.out.println();
         for (String n: nums2[i])
         {
            System.out.print(n);
         }
      }

   }

我插入*的循环给我错误。

for (int x = max; x > 0; x--)
      {
         System.out.println();
         for (int i = 0; i < nums2[x].length; i++)
         {
            if (count[i] > 0)
               nums2[x][i] = "*";
               count[i]--;
            else
               nums2[x][i] = "";
         }
      }

我正在尝试获取每一行,检查每个索引以查看是否需要一个星号(如果需要,请放置一个星号,如果不放置一个空格),然后对2d数组中的每一行执行此操作

2 个答案:

答案 0 :(得分:1)

我认为问题可能出在for循环定义中,

for (int x = max; x > 0; x--)

您可以尝试将其更改为

for (int x = max-1; x >= 0; x--)

原因是,由于您定义了一个大小为max的数组,并且索引从零开始max实际上在该数组之外

答案 1 :(得分:0)

第一件事就是这一行

for (int x = max; x > 0; x--)

应该是

for (int x = max-1; x >= 0; x--)

然后,我将更改逻辑以决定是否要在此添加“ *”或“”:

if (count[i] > x)
   nums2[x][i] = "*";
else
   nums2[x][i] = " ";

请注意,这必须是一个空格,而不是一个空字符串,否则您的行将被压缩。

通过这些更改,您将获得如下输出:

**********
**********
**********
**********
**********
**********
**********
** *******
 * *** ***
 * * * ***
 * *   ** 
 * *    * 
        * 

显然是倒挂的。您需要更改此行:

for (int i = 0; i < max; i++) // print 2d array

对此

for (int i = max-1; i >= 0; i--) // print 2d array

哪个会产生:

 *  **    
 *  **    
 *  **    
 *  ** *  
 *  ** *  
 * *** * *
 * *** * *
 * *** * *
 ***** ***
****** ***
****** ***
****** ***
**********
**********
**********
相关问题