线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:10

时间:2014-07-16 08:56:01

标签: java

Prog:假设一个酒店有5层,每层10个房间。每个房间允许的人数不是4.使用随机填充矩阵并以矩阵格式打印。 和1.计算酒店的客户总数     2.显示哪个房间是免费的     3.如果一个房间的顾客不是4,打印一条消息说加床费用!

import java.util.Random;

class HRooms
{

public static void main( String v[ ] )
{

int Tcount=0;
Random rnd  = new Random();
int avail[ ][ ] = new int [5][10];

for( int r=1; r<6; r++)
{       
     for( int c = 1; c<11; c++)
     {
       avail[r][c] = rnd.nextInt( 5 );
       Tcount=Tcount+avail[r][c];
     }
}

System.out.println("Rooms avail. list");
System.out.println("----------------------------------------");
for( int r=1; r<6; r++)
{       
     for( int c = 1; c<11; c++)
     {
       System.out.print(avail[r][c] + "  ");
     }
     System.out.print("\n");
}

System.out.print("\n");
System.out.println("Total number of customers in the hotel is "+Tcount);
System.out.print("\n");


for( int r=1; r<6; r++)
{       
     for( int c=1; c<11; c++)
     {
    if( avail[r][c]==0)
        {
            System.out.println("The room "+c+" in floor "+r+" is empty");
        }

    }
}

System.out.print("\n");

for( int r=1; r<6; r++)
{       
     for( int c = 1; c<11; c++)
     {

    if( avail[r][c]==4)
        {
            System.out.println("The room "+c+" in floor "+r+" has 4 customers, extra bed charges");
        }
    }
}

        }
    }

输出说 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:10         在HRooms.main(HRooms.java:18)

解决方案是什么?

2 个答案:

答案 0 :(得分:3)

array中的索引从0开始,而不是1

因此,如果您有arr[5],则可以从arr[0] - arr[4]

访问它

当您对avail[r][c]==0r=5c= 10时,您实际上正在访问 6 th 11 th 列不存在 - 因此索引超出范围。

所以,这个:

    for( int r=1; r<6; r++)
    {       
      for( int c = 1; c<11; c++)
      { //code }
    }

应该是

for( int r=0; r<5; r++)
    {       
      for( int c = 0; c<10; c++)
      { //code }
    }

答案 1 :(得分:0)

索引从java中的0开始。

您想要填充一个大小的数组,因此请使用数组维度来填充它:

for( int r=0; r<avail.length; r++)
{       
  for( int c = 0; c<avail[r].length; c++)
  {
    avail[r][c] = rnd.nextInt( 5 );
    Tcount=Tcount+avail[r][c];
  }
}
这样,您就不会遇到任何ArrayIndexOutOfBoundsException