Miért nem írja ki a fájlból beolvasott számokat?
private static void filekez() {
try {
Scanner beolvas = new Scanner (System.in);
System.out.println("Adja meg a file nevet amiben az adatok vannak!");
String teglalap = beolvas.nextLine();
ArrayList<Integer> lista = new ArrayList();
FileReader fr = new FileReader(teglalap);
BufferedReader br = new BufferedReader(fr);
String adatok = br.readLine();
int szamok = Integer.parseInt(adatok);
lista.add(szamok);
int elso = lista.get(0);
int masodik = lista.get(1);
System.out.println("Terulet: " + (elso * masodik));
System.out.println("Kerulet: " + ((elso + masodik) * 2));
if (elso == masodik) {
System.out.println("Az adatok alapjan ez egy negyzet");
}
else {
System.out.println("Nem negyzet");
}
fr.close();
br.close();
}catch(Exception e) {}
}
És amikor elér oda a program, hogy kiírja a terület, kerületet, továbblép és nem csinál semmit csak kilép utána a metódusból. Mi ennek az oka?
Én nem is értem az egészet. Megpróbálsz beparsolni egy int-be 2 számot, aztán ezt az 1 db intet(!) berakni egy üres listába, amit utána megindexelsz 0-val meg 1-el is?
Most akkor hány számod van?
Egy kicsit zavarosak a fejedben a dolgok.
A parseInt metódus egy String formában levő számot alakít int-é (pl. "1234"-ből csinál 1234-et int típusban). De olyat nem tud, hogy több egymással szóközzel elválasztott számot beolvas. Ez abból is látszik, hogy csak egy int-et ad vissza, azaz EGY darab számot.
Mivel te két szóközzel elválasztott számot adsz a parseInt-nek, az hibát fog dobni, amit te szépen eltusolsz a catch blokkodban (ilyenkor illik kiíratni az exceptiont, hogy lásd ha valami hiba keletkezik, egyébként elég csak az IOException-öket elkapni).
Azt ajánlom a fájlból való olvasásra is a Scanner-t használd, sokkal egyszerűbb.
Ne privátba kérdezz! Másnak is lehet, hogy segít a válasz, erre valók a fórumok.
Tehát így néz ki a beolvasás a file-ból:
Scanner sc = new Scanner(new File(teglalap));
int elso = sc.nextInt();
int masodik = sc.nextInt();
sc.close();
private static void filekez() {
try {
Scanner beolvas = new Scanner (System.in);
System.out.println("Adja meg a file nevet amiben az adatok vannak!");
String teglalap = beolvas.nextLine();
Scanner sc = new Scanner(new File(teglalap));
int elso = sc.nextInt();
int masodik = sc.nextInt();
System.out.println("Terulet: " + (elso * masodik));
System.out.println("Kerulet: " + ((elso + masodik) * 2));
if (elso == masodik) {
System.out.println("Az adatok alapjan ez egy negyzet");
}
else {
System.out.println("Nem negyzet");
}
sc.close();
}catch(Exception e) {}
}
Ha jól értelmezem akkor valahogy így kellene kinéznie a metódusnak, de a //Scanner sc = new Scanner(new File(teglalap)); résznél cannot find symbol-t ír akkor azt, hogy lehetne orvosolni?
Nem importáltad a File-t a java.io package-ből.
De írtam, hogy ne legyenek üres catch blokkjaid (csak ha jó okod van rá), mert nem árt, ha látod is, hogy miért nem csinál semmit a programod.
Most, hogy Scanner-eket használsz, már csak FileNotFoundException dobódik a Scanner konstruktorából, csak azt kapd el. Ha van kedved megcsinálhatod azt is, hogy FileNotFoundException esetén úrja bekérsz egy file nevet, mivel ugye a megadott nevű fájl nem létezik.
Megcsináltam az importálást, meg a FileNotFoundException e-t és most meg ezt a hibát irta:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at sikidom_szamitas.filekez(sikidom_szamitas.java:20)
at sikidom_szamitas.kerdes1(sikidom_szamitas.java:92)
at sikidom_szamitas.menu(sikidom_szamitas.java:128)
at sikidom_szamitas.main(sikidom_szamitas.java:148)
Bocsi, hogy ennyit kérdezek, de még kezdő vagyyok és még csak tanulom a dolgokat, és köszi, hogy segítesz!
Próbáld meg értelmezni a hibát! Nézz utána, hogy mi az az InputMismatchException, sokkal gyorsabb mint itt válaszra várni.
Itt tömören le van írva, hogy mit jelent ez az Exception:
Akkor fog rendesen lefutni, ha a fájlodban nincs semmi más, csak a 2 db szám.
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!