Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49

    Problemi con StringTokenizer

    Ciao a tutti.
    Sto cercando di leggere da file una lista.Ho pensato di usufruire della classe StringTokenizer andava tutto bene fino a quando non mi sono ritrovato a dover leggere l'ora.
    Guardando capirete.
    codice:
    public class Boot
    {
    	public static void main(String[] args) //throws IOException
    	{
    		Scanner console = new Scanner(System.in);
    		System.out.println("Input file: ");
    		String inputFileName = console.next();
    		System.out.println("Output file: ");
    		String outputFileName = console.next();
    		
    		try
    		{
    			FileReader reader = new FileReader(inputFileName);
    			Scanner in = new Scanner(reader);
    			PrintWriter output = new PrintWriter(outputFileName);
    			
    			while(in.hasNextLine())			
    			{
    				String nomeStazione = in.next();
    				Stazione stz = new Stazione(nomeStazione);
    				
    				int numBinario = in.nextInt();
    				Binario b = new Binario(numBinario);
    				
    				String sigla = in.next();
    				int numCarrozze = in.nextInt();
    				double lunLocomotiva = in.nextDouble();
    				int lunCarrozze = in.nextInt();
    				
    				StringTokenizer st = new StringTokenizer(in.next()," ");
    				
    				Calendar calendar = new GregorianCalendar();
    			//	int orarioArrivo = in.nextInt();
    				calendar.set(Calendar.HOUR,in.nextInt());
    				calendar.set(Calendar.MINUTE,in.nextInt());
    				
    				Treno t = new Treno(st.nextToken(),Integer.parseInt(st.nextToken()),Double.parseDouble(st.nextToken()),Integer.parseInt(st.nextToken()),
    						Integer.parseInt(calendar.set(Calendar.HOUR,st.nextToken());							//Leggi la succesiva riga
    				System.out.println(t);
    			}
    			
    			output.close();			//Quando si termina di scrivere chiude il file.
    		}
    		catch(IOException e)
    		{
    			System.out.println("Error processing file: "+e);
    		}
    	}
    }
    Questa è la lista che devo caricare.
    [code]
    Salerno
    1
    Intercity 354 6 29.9 28 10:20 0 21
    Eurostar 745 10 32.89 35 11:10 true
    Eurostar 232 11 32.89 35 17:10 false
    2
    Eurostar 745 10 32.89 35 15:10 true
    Intercity 354 6 29.9 28 10:30 0 21
    3
    Intercity 354 6 29.9 28 10:20 0 21
    Eurostar 745 10 32.89 35 11:10 true
    Eurostar 232 11 32.89 35 17:10 false
    3
    Intercity 354 6 29.9 28 10:20 0 21
    Eurostar 745 10 32.89 35 11:10 true
    Eurostar 232 11 32.89 35 17:10 false
    1
    Eurostar 232 11 32.89 35 14:10 false
    [\code]

    Il problema sta nell'ora perchè non so come trattarlo dato che nella classe Treno ho solo una variabile istanza Calendar orarioArrivo.
    invece devo passargli ore e minuti.
    Come faccio?
    Spero di essere stato chiaro per qualsiasi cosa sono incollato davanti al pc!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problemi con StringTokenizer

    Originariamente inviato da eoj
    Il problema sta nell'ora perchè non so come trattarlo dato che nella classe Treno ho solo una variabile istanza Calendar orarioArrivo.
    invece devo passargli ore e minuti.
    Innanzitutto sarebbe meglio se leggessi "a righe" (il fatto che hai usato hasNextLine() non vuol dire che stai leggendo 1 riga per volta ...).

    Comunque se trovi es. "10:20" semplicemente lo spezzi ulteriormente. Puoi fare:

    a) StringTokenizer con delimitatore ":", quindi ottieni i due token e li converti in int con Integer.parseInt().
    b) Un altro Scanner, con delimitatore ":" quindi ottieni direttamente i due int con nextInt().
    c) usare split() di String per ottenere i due token (simile per il parsing al caso a) ).
    d) Uso di Pattern/Matcher per estrarre i due valori come "gruppi" (idem ad a) ci vuole il parseInt).

    Una volta che hai 2 int, li metti in un GregorianCalendar.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    Non riesco a capire come devo fare......
    Allora faccio:
    StringTokenizer st1 = new StringTokenizer(in.next(),":");
    poi come faccio a metterli in un GregorianCalendar?

    Scusa ma non ci riesco.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da eoj
    StringTokenizer st1 = new StringTokenizer(in.next(),":");
    poi come faccio a metterli in un GregorianCalendar?
    Intanto inizia con il prendere effettivamente i due int. Poi .... guarda i costruttori di GregorianCalendar.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    Allora io ho fatto in questo modo:
    codice:
    StringTokenizer st1 = new StringTokenizer(in2.next(),":");
    int ore = in2.nextInt();
    int minuti = in2.nextInt();
    Calendar calendar = new GregorianCalendar(0,0,0,ore,minuti);
    Treno t = new Treno(st.nextToken(),Integer.parseInt(st.nextToken()),Double.parseDouble(st.nextToken()),Integer.parseInt(st.nextToken()),calendar);
    Ho fatto bene?

  6. #6
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    Ho un'altro problema!
    nel momento in cui passo un Calendar come parametro del costruttore alla classe Treno
    come faccio a risolvere questo?
    Devo aggiungere i minuti di ritardo al treno.(public void ritarda)*
    ma orarioArrivo è di tipo Calendar,mentre si aspetta un int e i vari cast non hanno portato ad un bel niente.
    Quindi la domanda è ma sto orarioArrivo allora deve essere o non essere un int?
    codice:
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class Treno 
    {
    	
    	public Treno(){}
    	public Treno(String sigla,int numeroCarrozze,double lunghezzaLocomotiva,
    			     int lunghezzaCarrozze,Calendar orarioArrivo)
    	{
    		this.sigla = sigla;
    		this.numeroCarrozze = numeroCarrozze;
    		this.lunghezzaLocomotiva = lunghezzaLocomotiva;
    		this.lunghezzaCarrozze = lunghezzaCarrozze;
    		this.orarioArrivo = orarioArrivo;
    	}
    		
    	public void aggiornaCarrozze(int numCar)
    	{
    		if(numCar<0)
    			throw new WrongArgumentException("Numero carrozze non può essere minore di zero.");
    		else
    			numeroCarrozze = numeroCarrozze + numCar;
    	}
    	*public void ritarda(int minuti)
    	{
    		Calendar calendar = new GregorianCalendar();
    		calendar.add(orarioArrivo, minuti);
    	}
    	public String getSigla()
    	{
    		return sigla;
    	}
    	public int getNumeroCarrozze()
    	{
    		return numeroCarrozze;
    	}
    	public double getLunghezzaLocomotiva()
    	{
    		return lunghezzaLocomotiva;
    	}
    	public  int getlunghezzaCarrozze()
    	{
    		return lunghezzaCarrozze;
    	}
    	
    	private String sigla;
    	private int numeroCarrozze;
    	private double lunghezzaLocomotiva;
    	private int lunghezzaCarrozze;
    	private Calendar orarioArrivo;
    }

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da eoj
    Devo aggiungere i minuti di ritardo al treno.(public void ritarda)*
    ma orarioArrivo è di tipo Calendar,
    Calendar ha un metodo add(int field, int amount).
    Per cui puoi aggiungere un certo ammontare ad un campo, ad esempio Calendar.MINUTE.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    Mi sorge un dubbio :master:
    Ma se orarioArrivo è di tipo Calendar come faccio ad aggiungere effetivamente i minuti al treno?
    magari devo fare cosi:
    codice:
    public void ritarda(int minuti)
    	{
    		//Calendar calendar = new GregorianCalendar();
    		orarioArrivo.add(Calendar.MINUTE,minuti);
    		
    	}

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da eoj
    orarioArrivo.add(Calendar.MINUTE,minuti);
    Corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    AndBin ti ringrazio ma non sono riuscito ancora a risolvere il primo problema.
    codice:
    while(in.hasNext())			
    			{
    				String nomeStazione = in.next();
    				Stazione stz = new Stazione(nomeStazione);
    				
    				int numBinario = in.nextInt();
    				Binario b = new Binario(numBinario);
    				
    				StringTokenizer st = new StringTokenizer(in.next()," ");
    				StringTokenizer st1 = new StringTokenizer(in.next(),":");
    				int ore = Integer.parseInt(st1.nextToken());
    				System.out.println(nomeStazione);
    				System.out.println(numBinario);
    				int minuti = Integer.parseInt(st1.nextToken());
    				System.out.println(ore +" "+minuti);
    				Calendar calendar = new GregorianCalendar(0,0,0,ore,minuti);
    			//	int orarioArrivo = in.nextInt();
    			//	calendar.set(Calendar.HOUR,in.nextInt());
    			//	calendar.set(Calendar.MINUTE,in.nextInt());
    				
    				Treno t = new Treno(st.nextToken(),Integer.parseInt(st.nextToken()),Double.parseDouble(st.nextToken()),Integer.parseInt(st.nextToken()),calendar);							//Leggi la succesiva riga
    				System.out.println(t);
    			}
    Dove Sbaglio?


    mi legge il nome della stazione il binario e poi niente mi da problemi quando deve leggere Intercity 354 6 29.9 28 10:20 0 21

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.