Java-ban hogyan kell adattáblát létrehozni? Mi lehet a hiba( többi lent) ?
Szóval létre kellene hoznom egy 5 elemű parfűm nevű adattáblát, majd kiszűrnöm a 2011-ben gyártottakat (nyílván nem a kiszűréssel van gondom). Ehhez egy külön osztályban rekordtömböket adtam meg, majd a főosztályban létrehoztam az f2 példányt, ami lényegében egy adattábla kellene hogy legyen a ciklus után. Szóval egy ciklusban megadtam az f2 példány mindegyik rekordtömbjének az elemeit a következőképpen:
parfüm f2 = new parfüm();
System.out.println("Adj meg 5 parfűmöt:");
for (int i = 0; i<5; i++) {
System.out.println(i+1 + ".parfum:");
System.out.print("Összetétel :"); f2.összetevők[i] = beolvas.nextLine();
System.out.print("Név :"); f2.nev[i] = beolvas.nextLine();
System.out.print("Év :"); f2.ev[i] = beolvas.nextInt();
System.out.print("Méret :"); f2.meret[i] = beolvas.nextInt();
System.out.print("Ár :"); f2.ar[i] = beolvas.nextInt();
System.out.println("---------------");
}
System.out.println("A 2011-ben gyártott parfűmök adatai:");
for (int i = 0; i<4; i++) {
if (f2.ev[i]==2011)
System.out.println(i + ".parfum: I " + f2.összetevők[i] + " I " + f2.nev[i] + " I " + f2.ev[i] +" I " + f2.meret[i] + " I " + f2.ar[i] + " I");
A külön fájlban megadott osztály pedig:
public class parfüm {
public String[] összetevők;
public String[] nev;
public int[] ev;
public int[] meret;
public int[] ar;
}
Szintaktia hibám nincs, nem jelez hibát, viszont futás után ahogy bekérem az első elemet, kiakad a program, ezzel a hibaüzenettel:
Exception in thread "main" java.lang.NullPointerException
at labor8_hapakviktor.Labor8_HapakViktor.main(Labor8_HapakViktor.java:91)
C:\Users\lenovo\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 2 seconds)
Valaki tudna segíteni mi lehet a probléma. Lehet e így megadni rekordtömb-adattáblát?
Exception in thread "main" java.lang.NullPointerException at abor8_hapakviktor.Labor8_HapakViktor.main(Labor8_HapakViktor.java:91)
ahogy a hibeüzenet is szól: 91. sorban kapsz egy NullPointerException-t
Miért használsz ékezeteket a forráskódban?
Miért tárolsz tömböket a parfüm-ben, parfümök tömbje helyett?
Köszönöm a segítséget, viszont a pillanaton oldottam meg másképp a feladatot. Először is konstruktort vezettem be az osztálymetódus-fájlban, majd öt record-tömb helyett egyetlen példánytömböt, azaz record-tömböt hoztam létre, amit létrehozott mezőtömbökkel töltöttem fel és így már elvileg működik. Itt lenne a kódom:
String[] O = new String[5];
String[] N = new String[5];
int[] E = new int[5];
int[] M = new int[5];
int[] A = new int[5];
System.out.println("Adj meg 5 parfűmöt:");
for (int i = 0; i<5; i++) {
System.out.println(i+1 + ".parfum:");
System.out.print("Összetétel :"); O[i] = beolvas.nextLine();
O[i] = beolvas.nextLine();
System.out.print("Név :"); N[i] = beolvas.nextLine();
System.out.print("Év :"); E[i] = beolvas.nextInt();
System.out.print("Méret :"); M[i] = beolvas.nextInt();
System.out.print("Ár :"); A[i] = beolvas.nextInt();
System.out.println("---------------");
}
parfüm[] f = new parfüm[5];
for (int i = 0; i<5; i++) {
f[i] = new parfüm(O[i], N[i], E[i], M[i], A[i]);
}
System.out.println("A 2011-ben gyártott parfűmök adatai:");
for (int i = 0; i<4; i++) {
if (f[i].ev==2011)
System.out.println(i + ".parfum: I " + f[i].összetevők + " I " + f[i].nev + " I " + f[i].ev +" I " + f[i].meret + " dl I " + f[i].ar + " ft I");
}
Az osztálymetódus-fájlpedig:
public class parfüm {
public String összetevők;
public String nev;
public int ev;
public int meret;
public int ar;
public parfüm(String o, String n, int e, int m, int a ) {
összetevők = o;
nev = n;
ev = e;
meret = m;
ar = a;
}
Csak az O tömb bekérésénél a második körtől átugorja valamiért az elem beolvasását üres szót hagyva, emiatt olvasatom be mégegyszer. Ha erre találsz logikus magyarázatot megköszönném! :)
At 1.es megjegyzései jogosak. De ami az igazi baj, hogy az osztályodban a tömböket csak deklaráltad, de nem inicializáltad. Hiányzik a
public String[] nev = new String[5];
stb.
Amúgy az i < 4 is rossz a programban.
#2
már sokkal jobb de az O, N, E, M, A tömbök teljesen fölöslegesek.Elegendő 1-1 változó a tömbök helyett és hívhatod közvetlenül a forban a konstruktort.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!