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)
解决方案是什么?
答案 0 :(得分:3)
array
中的索引从0
开始,而不是1
。
因此,如果您有arr[5]
,则可以从arr[0]
- arr[4]
当您对avail[r][c]==0
和r=5
说c= 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