[英]Multidimensional array OutOfBondsException in Java
我在这段代码中遇到了一些问题。 我需要:询问姓名和客户上个月租借的电影的数量。 第一列用于名称的数组,第二列用于上个月租借的电影数量的二维数组,第二列则用于客户获得的免费租金数量(两次租金后,客户获得免费的租金)。 向客户显示最大数量的免费租金以及这个数字是多少。
import java.util.Scanner;
public class RentalStore
{
public static final int NAMES = 10; //ten clients
public static final int N_MOVIES = 10; //column with movies per client
public static final int F_MOVIES = 2; //is granted free movie rentals.
public static void ClientRegistration(String[] names, int[][] movies) {
Scanner sc = new Scanner (System.in);
for(int i=0; i< NAMES; i++) {
System.out.println("Type the name of the client " + i + " and the amount of movies: ");
names[i] = sc.next();
movies[i][0] = sc.nextInt();
}
for(int i=0; i<F_MOVIES; i++) {
movies[i][i] = movies[i][0]/2;
}
}
public static void main (String [] args) {
String[] names = new String[NAMES];
int[][] movies = new int[N_MOVIES][F_MOVIES];
Scanner sc = new Scanner (System.in);
ClientRegistration(names,movies);
int largest = 0;
for(int i=0; i<F_MOVIES; i++) {
if(movies[i][i] > largest) {
largest = movies[i][i];
}
}
for(int i=0; i<F_MOVIES; i++) {
if(movies[i][i] == largest) {
System.out.println("The client " + names[i] + " is entitled to " + largest + " movies.");
}
}
}
}
第二列将存储客户的免费租金数量。 但是,如果我将F_MOVIES更改为N_MOVIES,则会得到ArrayIndexOutOfBoundsException。
将多维数组视为网格是最容易的。 你有:
F_MOVIES
N_MOVIES 0 1
0 [] []
1 [] []
2 [] []
3 [] []
4 [] []
5 [] []
6 [] []
7 [] []
8 [] []
9 [] []
将F_Movies设置为N_MOVIES会超出范围,因为F_MOVIES不能超过索引1
我认为您应该更改的第一件事是:
for(int i=0; i<F_MOVIES; i++) { movies[i][i] = movies[i][0]/2; }
for(int i=0; i<F_MOVIES; i++) { movies[i][i] = movies[i][0]/2; }
到for(int i=0; i<F_MOVIES; i++) { movies[i][1] = movies[i][0]/2; }
for(int i=0; i<F_MOVIES; i++) { movies[i][1] = movies[i][0]/2; }
基本上,无论您有电影[i] [i]的地方,都应替换为电影[i] [1]。
我猜您应该考虑的另一件事是免费租赁数量的计算,根据您当前的代码,该方法只是将电影数量除以2。但是,根据您的要求,每2租金应为1。 因此,如果租借的电影数量为2,则免费租金为1。但是,使用您当前的代码,如果租借的电影数量为3,则免费租金变为0! 因此,免费租金的计算应使用N_MOVIES而不是F_MOVIES
你的问题在于
for(int i=0; i<F_MOVIES; i++) {
movies[i][i] = movies[i][0]/2; //change to movies[i][1]
}
在N_MOVIES上进行迭代时,由于电影被定义为[N_MOVIES] [F_MOVIES],因此您将越界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.