java - java代码中的越界异常,需要帮助(初学者)
问题描述
package hr.java.vjezbe.glavna;
import java.math.BigDecimal;
import java.util.Scanner;
import hr.java.vjezbe.entitet.Artikli;
import hr.java.vjezbe.entitet.Kategorija;
import hr.java.vjezbe.entitet.Korisnik;
public class Glavna {
private static final int BROJ_KORISNIKA = 3;
private static final int BROJ_KATEGORIJA = 3;
private static int n;
public static void main(String[] args) {
Scanner skener = new Scanner(System.in);
Korisnik[] korisnici = new Korisnik[BROJ_KORISNIKA];
Kategorija[] kategorije = new Kategorija[BROJ_KATEGORIJA];
Artikli[] artikli = new Artikli[n];
for (int i = 0; i < BROJ_KORISNIKA; i++) {
System.out.println("Unesite " + (i + 1) + ". korisnika:");
System.out.print("Unesite ime >> ");
String ime = skener.nextLine();
System.out.print("Unesite prezime >> ");
String prezime = skener.nextLine();
System.out.print("Unesite E-mail >> ");
String email = skener.nextLine();
System.out.print("Unesite broj telefona >> ");
String telefon = skener.nextLine();
korisnici[i] = new Korisnik(ime, prezime, email, telefon);
}
for (int i = 0; i < BROJ_KATEGORIJA; i++) {
System.out.println("Unesite naziv " + (i + 1) + ". kategorije: ");
String naziv = skener.nextLine();
System.out.print("Unesite broj artikala za tu kategoriju >> ");
n = skener.nextInt();
skener.nextLine();
int counter = 0;
do {
System.out.print("Unesite naslov artikla >> ");
String naslov = skener.nextLine();
System.out.print("Unesite opis artikla >> ");
String opis = skener.nextLine();
System.out.print("Unesite cijenu artikla (sa zarezom) >> ");
BigDecimal cijena = skener.nextBigDecimal();
skener.nextLine();
artikli[n] = new Artikli(naslov, opis, cijena);
counter++;
} while (counter < n);
kategorije[i]= new Kategorija(naziv, artikli);
}
skener.close();
}
}
我的代码有问题,在我输入称为 cijena 的价格后,它会引发越界异常。我不知道问题出在哪里,代码应该要求用户输入类别的数量,然后让他输入并将它们保存在一个数组中,然后将该数组保存在另一个名为 kategorije 的数组中。欢迎任何帮助和建议。
解决方案
n = skener.nextInt();
这一行,您正在通过您的输入获取一个 int 值。让我们说5;所以,
n = 5;
在这一行=>
artikli[n] = new Artikli(naslov, opis, cijena);
您正在尝试访问 artikli[5] 索引,但是数组的大小为 0。您在此数组之前使用 n = 0 启动,因为您没有初始化“n”,未初始化的 int 变量默认为 0=>
private static int n; //which is 0 by dafault
Artikli[] artikli = new Artikli[n]; // creates an array named artikli of size 0
首先,您必须将数组初始化为适当的大小,然后您将能够访问您的 Artikli[n] 索引。
快速解决方案:
replace -> Artikli[] artikli = new Artikli[n];
with this-> Artikli[] artikli = new Artikli[1000];
假设您的 int 输入将小于 1000,以便您可以访问索引 artikli[0 到 999]
我试图尽可能详细地解释。如果您有任何困惑,请发表评论。
推荐阅读
- nginx - 在 Nginx 反向代理后面运行的 Signalr
- android - android改造给出响应的空值可能存在端点问题
- python - 关于python函数中参数的问题
- apache-spark - 传递外部依赖以构建 spark-submit Hydrosphere-mist
- istio - Envoy 中的“max_connections”到底是什么意思?
- wifi - 为什么每个 WLAN 附件都有不同的数据速率?
- angular - Angular 6 中组件之间的数据共享
- python - 如何设置 PyCharm 在本地机器上开发 AWS Lambda 函数?
- java - 使用 Java 11 RMI 调用变慢
- arrays - VB Net:从字典数组中按键获取值