[英]Getting out of bounds exception in java code, need help (begginer)
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]
我試圖盡可能詳細地解釋。 如果您有任何困惑,請發表評論。
您尚未聲明 n 的值。 您必須指定它,因為 list 實際上不能為 0。請執行以下操作:
private static int n = 3;
artikli[n] = new Artikli(naslov, opis, cijena);
錯誤,因為列表小於您想要給它的值
如果這對你有幫助,請投票給我。 我是新來的,想擁有一些基本的聲譽。 謝謝! 😀
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.