簡體   English   中英

在java代碼中越界異常,需要幫助(初學者)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM