Witam!
Mam problem ze wczytywaniem danych z pliku za pomocą Scannera. Otóż kod przedstawia się następująco:
package sklep;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
class Produkt{
public String nazwa;
public float cena;
public Produkt(){
}
public void wyswietl()
{
System.out.println(nazwa+" "+cena);
};
}
class Nabial extends Produkt{
public float waga;
public Nabial(){
super();
waga = waga;
}
public void wyswietl()
{
System.out.println(nazwa+" "+cena+" "+waga);
};
}
class Rosliny extends Produkt{
public String gatunek;
public Rosliny(){
super();
gatunek = gatunek;
}
public void wyswietl()
{
System.out.println(nazwa+" "+cena+" "+gatunek);
};
}
class Chemia extends Produkt{
public String przeznaczenie;
public Chemia(){
super();
przeznaczenie = przeznaczenie;
}
public void wyswietl()
{
System.out.println(nazwa+" "+cena+" "+przeznaczenie);
};
}
public class Sklep {
public static void main(String[] args) throws FileNotFoundException {
String pr="Produkt";
String na="Nabial";
String ro="Rosliny";
String ch="Chemia";
String klucz;
Produkt tab[] = new Produkt[100];
for(int i=0;i<tab.length;i++)
tab[i] = new Produkt();
int ile_jest= 0 ;
/* List<Object> Produkt = new ArrayList<>();
List<Object> Nabial = new ArrayList<>();
List<Object> Rosliny = new ArrayList<>();
List<Object> Chemia = new ArrayList<>();
*/
Scanner sc = new Scanner(System.in);
System.out.println(
"0 - Menu \n"
+ "1 - wczytaj produkty z pliku \n"
+ "2 - wypisz produkty \n"
+ "3 - \n"
+ "4 - \n"
+ "5 - \n");
int i = 0;
while (i<20)
{
i = sc.nextInt();
switch (i){
case 0:
System.out.print("0 - Menu \n" );
break;
case 1:
System.out.println("wczytujemy z pliku txt");
//File file = new File("sklep.txt");
String nazwa="sklep.txt";
File in = new File(nazwa);
Scanner plik = new Scanner(in);
while(plik.hasNext() == false)
{
klucz = plik.next();
System.out.println("wczytujemy klucz ");
if(klucz.equals(pr)){
int x = plik.nextInt();
for(int z=0; z<x ; z++)
{
Produkt tmp = new Produkt();
tmp.nazwa = plik.nextLine();
tmp.cena = plik.nextFloat();
tab[ile_jest]=tmp;
System.out.println(tab[ile_jest]);
ile_jest++;
}
klucz = plik.next();
}
if(klucz.equals(na)){
int x = plik.nextInt();
for(int z=0; z<x ; z++)
{
Nabial tmp2 = new Nabial();
tmp2.nazwa = plik.nextLine();
tmp2.cena = plik.nextFloat();
tmp2.waga = plik.nextFloat();
tab[ile_jest]=tmp2;
System.out.println(tab[ile_jest]);
ile_jest++;
}
klucz = plik.next();
}
if(klucz.equals(ro)){
int x = plik.nextInt();
for(int z=0; z<x ; z++)
{
Rosliny tmp3 = new Rosliny();
tmp3.nazwa = plik.nextLine();
tmp3.cena = plik.nextFloat();
tmp3.gatunek = plik.nextLine();
tab[ile_jest]=tmp3;
System.out.println(tab[ile_jest]);
ile_jest++;
}
klucz = plik.next();
}
if(klucz.equals(ch)){
int x = plik.nextInt();
for(int z=0; z<x ; z++)
{
Chemia tmp4 = new Chemia();
tmp4.nazwa = plik.nextLine();
tmp4.cena = plik.nextFloat();
tmp4.przeznaczenie = plik.nextLine();
tab[ile_jest]=tmp4;
System.out.println(tab[ile_jest]);
ile_jest++;
}
}
}
plik.close();
System.out.println("koniec wczytywania");
break;
case 2:
for(int j=0; j > ile_jest; j++)
{
System.out.println(tab[i]);
}
break;
}
}}}
Po kompilacji wywala błąd oraz nic nie wczytuje, już nie wiem gdzie szukać przyczyny tego problemu. Dane w pliku wyglądają tak:
Produkt
4
Zeszyt
2.00
Kredki
3.00
Klej
2.66
Taśma
1.99
Nabial
3
Ser
19.00
1.00
Jogurt
4.99
0.5
Maślanka
3.00
0.250
Rosliny
3
Banan
3.99
bananowate
Pomidor
2.99
krzaczaste
Jablko
1.99
grand
Chemia
3
Mydło Fa
0.99
higienia
Axe
12.99
żel pod prysznic
MrClean
6.99
Płyn do mycia okien
Wczytywanie odbywa się w sposób następujący: czytam linijkę i sprawdzam do jakiego typu obiektu przypisywać zmienne które wczytuję, następna linijka to ilość tworzonych obiektów, potem znowu lecą obiekty. Wszystko wrzucam do tablicy obiektów. Proszę o pomoc, chociaż błąd jest zapewne banalny.
Błędy:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1416)
at sklep.Sklep.main(Sklep.java:135)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)