Wczytywanie i nadpisywanie konkretnych danych z pliku txt

0

Witam! Mam takie zadanie:

Napisac funkcje w której pierwszy parametr to nazwa
Drugi liczba sztuk
Trzeci cena
Funkcja zwraca liczbe sztuk, wprowadza rabat 10% dla towarow których cena jest większa niż 100 i liczba sztuk większa niż 250.

i za żadne skarby nie umiem sobie z nim do końca poradzić - albo w pliku nic się nie zapisuje, albo kompilator wyrzuca błędy typu: Exception in thread "main" java.lang.NumberFormatException: For input string: "jeansym"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at pliki.pliki(pliki.java:18)
at Test.main(Test.java:23)

Cały mój kod:

import java.io.*;
public class pliki {
	String nazwa; 
	int liczbasztuk; 
	int cena;
	public int pliki() {  
		int liczniksztuk = 0;
		try{
			DataInputStream in = new DataInputStream(new FileInputStream("lista.txt"));	
			 BufferedReader br = new BufferedReader(new InputStreamReader(in));
			 DataOutputStream out = new DataOutputStream(new FileOutputStream("lista2.txt"));
			 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out)); 
       String linia; 
       while ((linia = br.readLine()) !=null) {
    	   String[]tmp = linia.split(" ");
    	   nazwa = tmp[0];
    	   liczbasztuk = Integer.parseInt(tmp[1]);
		   int staracena = Integer.parseInt(tmp[2]);
		   for(int i=0; i<tmp.length; i++){   
	if(tmp[0].equalsIgnoreCase(nazwa) && Integer.valueOf(tmp[1]) > 250 && Integer.valueOf(tmp[2]) > 100) 
    		  cena = (staracena * 90)/100;
    	linia = (tmp[0] + " " + tmp[1] + " " + Integer.toString(cena));	   
    	  System.out.println("Plik" +linia);
    	   }
		   
	bw.write(linia);
   
       }
       br.close();
       bw.close();
       }
		
       catch (IOException e){
	
      System.out.println("Błąd!");
      e.printStackTrace();
       
       }
      System.out.println("Liczba sztuk" +liczniksztuk);
      return liczniksztuk;
		}
	}

Tutaj http://pastebin.com/dBwzDnSz wersja jaką dostałam, ale kompletnie dla mnie niezrozumiała. Proszę o jakąkolwiek pomoc, wyjaśnienie, jak rozwiązać to zadanie.

0

Problem jest z plikiem wejściowym. Trzecim wyrazem jednej z linii jest "jeansym", a oczekujesz, że tam będzie liczba. Gdy dochodzi do próby zamiany wyrazu na liczbę (staracena = Integer.parseInt(tmp[2])) program rzuca wyjątkiem.

0
adf88 napisał(a):

Problem jest z plikiem wejściowym. Trzecim wyrazem jednej z linii jest "jeansym", a oczekujesz, że tam będzie liczba. Gdy dochodzi do próby zamiany wyrazu na liczbę (staracena = Integer.parseInt(tmp[2])) program rzuca wyjątkiem.

Prosżę w takim razie o wyjaśnienie co dokładnie robi poniższa część kodu. Nigdy wcześniej tego nie używałam i nie bardzo rozumiem.

   String[]tmp = linia.split(" ");
    	   nazwa = tmp[0];
    	   liczbasztuk = Integer.parseInt(tmp[1]);
		   int staracena = Integer.parseInt(tmp[2]);

Mój plik z którego program ma wczytywać dane wygląda tak:

koszulka jeansym jeansyf top sukienka bluzam kurtkam kurtkaf
350 300 295 150 275 100 360 355
50 260 260 45 350 150 200 200

Chciałam żeby program wczytywał te dane do tablic, potem sprawdzał które komórki spełniają warunki z zadania i nadpisywał w nich ceny, po czym całość z nowymi wartościami

0
bacha napisał(a):

Prosżę w takim razie o wyjaśnienie co dokładnie robi poniższa część kodu. Nigdy wcześniej tego nie używałam i nie bardzo rozumiem.

   String[]tmp = linia.split(" ");
    	   nazwa = tmp[0];
    	   liczbasztuk = Integer.parseInt(tmp[1]);
		   int staracena = Integer.parseInt(tmp[2]);

Pobierasz do tablicy stringów elementy z ciagu linia gdzie każdy kolejny element jest oddzielony elementem podanym jako parametr funkcji split( w tym przypadku spacja. Kolejne kroki to przypisywanie do zmiennych elementów wyciętych i wklejonych do tymczasowej tablicy tmp. W między czasie z tego co mi się wydaje jest zmiana typu z String do Int za pomocą metody parseInt z klasy Integer :p.

A kod jest zły ponieważ ty wczytujesz najpierw pierwszą linie i przypisujesz do niej kolejno nazwe , liczbesztuk itd. A doskonale wiemy ze nie o to tobie chodziło :D. Bo widać że w pierwszej linii twojego pliku tekstowego znajdują się nazwy :D.
Wiec aby program poprawnie działał bez zmiany kodu musisz swój plik tekstowy zmienić na:

koszulka 350 50   
jeansym 300 260   
.... itd.
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1