首页 > 解决方案 > 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 的数组中。欢迎任何帮助和建议。

标签: javaexceptionindexoutofboundsexception

解决方案


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]

我试图尽可能详细地解释。如果您有任何困惑,请发表评论。


推荐阅读