Parsowanie xmla - nie wiem gdzie jest błąd

0

Powinien powstać plik, który generuje 3 gałęzie film, a generuje tylko jedną. Miejsca generuje prawidłowo. Tak wygląda kod (dodaje wszystkie elementy, może błąd siedzi poza klasą do xmla):

 import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

class Zapiszxml {
	public String _tytul, _imie, _nazwisko, _rezerwacja;
	public int _nr_miejsca;

	public void Zapiszxml( Kino kino){
		try {

			DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

			Document doc = docBuilder.newDocument();
			Element rootElement = doc.createElement("Kino");
			doc.appendChild(rootElement);

			Element firstElement = doc.createElement("Film");
			rootElement.appendChild(firstElement);
			
			Element secondElement = doc.createElement("Miejsce");
			firstElement.appendChild(secondElement);

			for (int i = 0; i < kino.wszystkie_filmy.length; i++){
				_tytul = kino.wszystkie_filmy[i].tytul;
				firstElement.setAttribute("Nazwa", _tytul);
				
				for(int j = 0; j < kino.wszystkie_filmy[i].wszystkie_miejsca.length; j++){
					_nr_miejsca = kino.wszystkie_filmy[i].wszystkie_miejsca[j].numer;
					secondElement.setAttribute("Numer", Integer.toString(_nr_miejsca));
					
					Element imie = doc.createElement("Imie");
					_imie = kino.wszystkie_filmy[i].wszystkie_miejsca[j].imie;
					imie.appendChild(doc.createTextNode(_imie));
					secondElement.appendChild(imie);

					Element nazwisko = doc.createElement("Nazwisko");
					_nazwisko = kino.wszystkie_filmy[i].wszystkie_miejsca[j].nazwisko;
					nazwisko.appendChild(doc.createTextNode(_nazwisko));
					secondElement.appendChild(nazwisko);
					
					Element rezerwacja = doc.createElement("Rezerwacja");
					if (kino.wszystkie_filmy[i].wszystkie_miejsca[j].rezerwacja == true){
						rezerwacja.appendChild(doc.createTextNode("Tak"));
					}
					else{
						rezerwacja.appendChild(doc.createTextNode("Nie"));
					}
					secondElement.appendChild(rezerwacja);
				}
			}
			
			//firstElement.setAttribute("Nazwa", "Terrorysci w Malmo");
			//secondElement.setAttribute("Numer", "13");

			

			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			DOMSource source = new DOMSource(doc);
			StreamResult result = new StreamResult(new File("save.xml"));

			// StreamResult result = new StreamResult(System.out);

			transformer.transform(source, result);

			System.out.println("Plik został zapisany pomyślnie!");

		  } catch (ParserConfigurationException pce) {
			pce.printStackTrace();
		  } catch (TransformerException tfe) {
			tfe.printStackTrace();
		  }
	}
}
 import java.util.Scanner;

class Kino {
	public
		final int ilosc_filmow = 3;
		Film[] wszystkie_filmy = new Film[ilosc_filmow];
		int ilosc_dodanych_filmow,
			wybrany_film;
		
	public
		Kino(){
			wybrany_film = 0;
			ilosc_dodanych_filmow = 0;
		}
	
		int zwroc_ilosc_dodanych_filmow(){
			return ilosc_dodanych_filmow;
		}
		
		void wyswietl_wszystkie_miejsca(){
	        for(int i = 0; i < ilosc_dodanych_filmow; i++){
	        	wszystkie_filmy[i].wypisz();
	        	wszystkie_filmy[i].wyswietl_wszystkie_miejsca();
	        }
	    }
	    
	    void wyswietl_wolne_miejsca(){
	    	for(int i = 0; i < ilosc_dodanych_filmow; i++){
	        	wszystkie_filmy[i].wypisz();
	        	wszystkie_filmy[i].wyswietl_wolne_miejsca();
	        }
	    }
	    
	    void wyswietl_zarezerwowane_miejsca(){
	    	for(int i = 0; i < ilosc_dodanych_filmow; i++){
	        	wszystkie_filmy[i].wypisz();
	        	wszystkie_filmy[i].wyswietl_zarezerwowane_miejsca();
	        }
	    }
	    
	    void dodaj_rezerwacje(){
	    	System.out.print("Dodaj rezerwacje:\n");      
	        wyswietl_wszystkie_filmy();
	        wybierz_film();	        
	        if(wybrany_film != 0)
	        {
	            wszystkie_filmy[wybrany_film-1].dodaj_rezerwacje();
	        }
	    }
	    
	    void anuluj_rezerwacje(){
	    	System.out.print("Anuluj rezerwacje:\n");      
	        wyswietl_wszystkie_filmy();
	        wybierz_film();	        
	        if(wybrany_film != 0)
	        {
	            wszystkie_filmy[wybrany_film-1].anuluj_rezerwacje();
	        }
	    }
	    
	    void sprawdz_miejsce(){
	    	System.out.print("Sprawdz rezerwacje:\n");
	    	wyswietl_wszystkie_filmy();
	        wybierz_film();	        
	        if(wybrany_film != 0)
	        {
	            wszystkie_filmy[wybrany_film-1].sprawdz_miejsce();
	        }
	    }
	    
		void dodaj_film(String _tytul){
			if(ilosc_dodanych_filmow<ilosc_filmow) 
		    {
		        wszystkie_filmy[ilosc_dodanych_filmow] = new Film(_tytul);
		        ilosc_dodanych_filmow++;
		        
		        System.out.print("Dodano film " + _tytul + "\n");
		    }
		    else
		    {
		    	System.out.print("Maksymalna liczba filmow dodana.\n");
		    }
		}
		
		void wybierz_film(){
		     System.out.print("Wybierz numer filmu:\n");
		     System.out.print("(lub 0 by wyjść)\n");
		     Scanner odczyt = new Scanner(System.in);
			 wybrany_film = odczyt.nextInt();
			 odczyt.close();
			 if(wybrany_film < 0 || wybrany_film > ilosc_dodanych_filmow){
			    if(wybrany_film != 0)
			    {
			        wybrany_film = 0;
			        System.out.print("Nie ma takiego filmu");
			    }
			 }
		}
		 
		void wyswietl_wszystkie_filmy(){
			int tmpi;
		    for(int i = 0; i < ilosc_filmow; i++){
		    	tmpi = i + 1;
		    	System.out.print("Film nr."+ tmpi + " - ");
		    	wszystkie_filmy[i].wypisz();
		    }
		}
}
 import java.util.Scanner;

class Film {
	public	
		String tytul;
		final int ilosc_miejsc = 30;
		Miejsce[] wszystkie_miejsca = new Miejsce[ilosc_miejsc];
		int wybrane_miejsce = 0,
			ilosc_dodanych_filmow;

	public
		Film(){
			tytul = "";
			for(int i = 0; i < ilosc_miejsc; i++){
				wszystkie_miejsca[i] = new Miejsce("","",i+1, false);
				}
			}
	
		Film(String _tytul){
			tytul = _tytul;
			for(int i = 0; i < ilosc_miejsc; i++){
				wszystkie_miejsca[i] = new Miejsce("","",i+1, false);
				}			
		}
	
		void wyswietl_wszystkie_miejsca(){
			for(int i = 0; i < ilosc_miejsc; i++){
				wszystkie_miejsca[i].wypisz();
			}
			System.out.print("Wszystkich miejsc :" + ilosc_miejsc + "\n");
		}
		
		void wyswietl_wolne_miejsca(){
			int ilosc = 0;
			for(int i = 0; i < ilosc_miejsc; i++){
				if(wszystkie_miejsca[i].rezerwacja==false){
				wszystkie_miejsca[i].wypisz();
				ilosc++; 
				}
			}
			System.out.print("Wszystkich miejsc :" + ilosc + "\n");
		}
		void wyswietl_zarezerwowane_miejsca(){
			int ilosc = 0;
			for(int i = 0; i < ilosc_miejsc; i++){
				if(wszystkie_miejsca[i].rezerwacja==true){
				wszystkie_miejsca[i].wypisz();
				ilosc++;
				}
			}
			System.out.print("Wszystkich miejsc :" + ilosc + "\n");
		}
		
		void dodaj_rezerwacje(){
			System.out.print("Dodaj rezerwację:\n");
			wyswietl_wolne_miejsca();
			wybierz_miejsce();
			if(wybrane_miejsce > 0){
				wszystkie_miejsca[wybrane_miejsce-1].rezerwuj();
			}	
			System.out.print("Rezerwacja dodana.\n");
		}
		
		void wybierz_miejsce(){			
			System.out.print("Wybierz numer miejsca:\n");
			System.out.print("(0 by wrócić)\n");
			Scanner odczyt = new Scanner(System.in);
			wybrane_miejsce = odczyt.nextInt();
			odczyt.close();
			if ((wybrane_miejsce < 0) || (wybrane_miejsce > ilosc_miejsc)){
				if (wybrane_miejsce != 0){
					wybrane_miejsce = 0;
					System.out.print("Nie ma takiego miejsca\n");
				}
			}	
		}
		
		void sprawdz_miejsce(){
			System.out.print("Sprawdz rezerwacje:\n");
			wybierz_miejsce();
			if(wybrane_miejsce != 0){
				wszystkie_miejsca[wybrane_miejsce-1].wypisz();
			}
			System.out.print("Wpisz cokolwiek i wciśnij enter by powrócić\n");
		}
		
		void anuluj_rezerwacje(){
			System.out.print("Anuluj rezerwację:\n");
			wyswietl_zarezerwowane_miejsca();
			wybierz_miejsce();
			if(wybrane_miejsce > 0){
				wszystkie_miejsca[wybrane_miejsce-1].anuluj_rezerwacje();
			}
			System.out.print("Rezerwacja anulowana.\n");
		}
		
		void wypisz(){
			System.out.print("Tytul: " + tytul + "\n");
		}
}
 import java.util.Scanner;

class Miejsce {
	public
		String 	imie, 
				nazwisko;
		int 	numer;
		Boolean rezerwacja;
		
		Miejsce(){
			imie ="";
			nazwisko ="";
			numer = 0;
			rezerwacja = false;
		}
		
		Miejsce(String _imie, String _nazwisko, int _numer, Boolean _rezerwacja){ //Konstruktor
			imie = _imie;
			nazwisko = _nazwisko;
			numer = _numer;
			rezerwacja = _rezerwacja;
		}
		
		void rezerwuj(){
			if (rezerwacja == true){
				System.out.print("Miejsce jest już zarezerwowane.\n");
			}
			else{
				Scanner odczyt = new Scanner(System.in);
				System.out.print("Podaj imię.\n");				
				imie = odczyt.nextLine();
				System.out.print("Podaj nazwisko.\n");
				nazwisko = odczyt.nextLine();
				odczyt.close();
				
				rezerwacja = true;
				
				System.out.print("Miejsce "+ numer + " zostało zarezerwowane dla: " 
						+ imie + " " + nazwisko +"\n");
			}
		}
		
		void anuluj_rezerwacje(){
			if (rezerwacja == true){
				imie = "";
				nazwisko = "";
				
				rezerwacja = false;
				System.out.print("Rezerwacja anulowana.\n");
			}
			else{
				System.out.print("Nie ma takiej rezerwacji.\n");
			}
		}
		
		void wypisz(){
			if (rezerwacja ==  true){
				System.out.print("Numer: " + numer + " - " + imie + " " + nazwisko + "\n");
			}
			else{
				System.out.print("Numer: " + numer + " - miejsce wolne\n");
			}
		}
};


0

debug

0

Łatwo powiedzieć, używam eclipse i nie mam dużego doświadczenia z java, to program na zaliczenie. Nie wiem jak sie debuguje

0

To print.out i wsadzić go przed wykonaniem warunków, w trakcie wykonywania i po wykonywaniu. I zobaczysz na czym się zacina.

0

używam eclipse

Nikt cię nie zmusza. Możesz jak czlowiek użyc IntelliJ.

to program na zaliczenie

No to albo ogarniesz jak sie używa debugera albo nie zaliczysz. Proste.

0

Dobry żart, jestem zmuszony używać eclipsa :) Wymóg projektu.

0

Generalnie program ci sie crashuje z powodu zbyt wczesnego zamkniecia instancji Scanner, która zresztą jest wywołana w aplikacji kilka razy. Generalnie podpowiem ci na przykladzie:

    int wybor;
    int i=0;
	Scanner odczyt = new Scanner(System.in); 

        while(i<4){
		System.out.print("Wczytaj: ");
		wybor = odczyt.nextInt();
		System.out.println(wybor);
		
		new B();
		
		i++;
	}
	odczyt.close();
 public class B {
	
	public B(){
		wykonaj();
	}

	public void wykonaj(){
		Scanner skaner = new Scanner(System.in);
		
		int i = 0;
       while(true){
			System.out.println("Wpisz dla B: ");
			int testowanie2 = skaner.nextInt();
			System.out.println("B: " + testowanie2);
			i++;
			if(i==5){
				break;
			}
		}
		//odkomentowanie linii ponizej spowoduje wyjatek NoSuchElementException
		//skaner.close();
	}
}

Jeśli dalej nie będzie działać to podaj pełne źródła bo chyba brakuje jeszcze jednego listingu, którego nie dodałeś.

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