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的数组中。任何帮助都是很好的建议。
您的artikli[]
数组用初始大小为0初始化,因为它是程序开始时n
变量上的值(int
变量使用默认的0
值初始化) 。
您可以删除该初始化程序,即使它不会造成伤害...
Artikli[] artikli = new Artikli[n];
...让它刚刚声明:
Artikli[] artikli;
并将其放入您的第二个循环中,以便实际以所需的大小对其进行初始化:
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();
//initialize it properly now:
artikli = new Artikli[n];
skener.nextLine();
int counter = 0;
(...)
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的值。您必须指定它,因为数组列表不能为0。做这样的事情:private static in n = 4;