Java 将字符串输入到二维数组中

Java 将字符串输入到二维数组中,java,arrays,Java,Arrays,试图制作直方图,但我尝试使用的循环在线程“main”java.lang.ArrayIndexOutOfBoundsException中给了我一个异常:14错误。我正试图从以下几点入手: * * * * * * * * * * * * * * * * * * * * * * * * *

试图制作直方图,但我尝试使用的循环在线程“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);
         }
      }

   }
public static void VerticalHist()
{
int max=0;//初始化max
int[]count=new int[10];//生成数组以查找最大值
对于(int i=0;i<100;i++)
{
int rand=(int)(Math.random()*((9-0)+1));//生成随机值
计数[兰德]+;
}
for(int x:count)//查找最大值
{
如果(x>最大值)
max=x;
}
//系统输出打印项次(最大值);
字符串[][]nums2=新字符串[max][10];//为直方图创建二维数组
对于(int x=max;x>0;x--)
{
System.out.println();
对于(int i=0;i0)
nums2[x][i]=“*”;
}
}
对于(int i=0;i
我插入*的循环给了我一个错误

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] = "";
         }
      }
for(int x=max;x>0;x--)
{
System.out.println();
对于(int i=0;i0)
nums2[x][i]=“*”;
伯爵[i]——;
其他的
nums2[x][i]=“”;
}
}

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

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

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

你能试着把它改成

用于(int x=max-1;x>=0;x--)


原因是,因为您定义了一个大小为
max
的数组,并且索引从零开始
max
实际上在数组之外,所以第一件事是这一行

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 x=max-1;x>=0;x--)
x>=0应该保持原样,因为对于值0,我们不能转到0--这是修复它的-1索引!我完全忘记了数组的索引不等于它们的长度。这件事我已经坚持了好几个小时了,谢谢你!
 *  **    
 *  **    
 *  **    
 *  ** *  
 *  ** *  
 * *** * *
 * *** * *
 * *** * *
 ***** ***
****** ***
****** ***
****** ***
**********
**********
**********