Ho questo esercizio, banale lo sò...ma non riesco a venirne a capo![]()
Questo è il testo:
Scrivere un programma Java che legga da un file di input alcune sequenze di valori interi e determini, per ogni sequenza, se tutti i numeri siano diversi l'uno dall'altro e, in caso negativo, ritorni i numeri che vengono ripetuti in ordine di apparizione. Si supponga che le sequenze in input non contengano più di 100 elementi e che i valori contenuti nelle sequenze siano compresi tra 0 e 100.
Input
La prima riga del file di input contiene il numero di sequenze memorizzate nel file. Le sequenze sono memorizzate dalla seconda linea in poi, una sequenza per riga. Il primo valore di ogni riga rappresenta il numero di elementi presenti nella sequenza. Gli elementi di ogni riga sono separati da uno spazio.
Output
Il file di output contiene tante righe quante sono le sequenze in input. Ogni riga contiene il simbolo “-” se nella sequenza corrispondente non sono presenti dei valori ripetuti. Se uno o più valori sono ripetuti all'interno della sequenza, la riga corrispondente contiene la sequenza dei valori ripetuti in ordine di apparizione.
Questo il mio codice:
codice:import java.util.Scanner; import java.io.*; public class ValoriDistinti { public static void main (String[]args) throws IOException { /**inizialiazzo qui i due valori, per poi essere viasibili anche nel blocco try e finally ed li metto a null per capire se nel blocco finally deve essere richiamato il metodo .close() */ Scanner s=null; FileWriter out=null;//FileWriter dobbiamo scrivere sul file il nostro output //si possono creare delle eccezioni, quindi è buona regola gestirle try { /** non c'è bisogno di creare FileReader, basta creare un'istanza della classe File e passarla come parametro al costruttore della classe Scanner*/ s= new Scanner(new File("input.txt")); out=new FileWriter("output.txt"); /** Nel testo si dice che il file è costituito da una sequenza di righe, dove il primo valore di ogni riga è il numero di elementi presenti nella sequenza. Quindi leggo il numero di righe...*/ final int numRighe=s.nextInt();//restituisce un valore numerico intero...il numero di righe appunto. //Per ogni riga... for(int i=0; i<numRighe; i++) { /** il formato del file prevede che il primo numero di ogni riga rappresenti il numero di elementi di cui essa è composta. Quindi dobbiamo leggere il numero di elementi per riga */ final int numElementi=s.nextInt(); int diversi=0; //devo controllare adesso se vi sono due numeri uguali //int numB=0; //scorro la sequenza di numeri per il confronto for(int j=0;j<numElementi; j++) { //leggo i numeri final int numA=s.nextInt(); final int numB=s.nextInt(); //e lo confronto if(numA!=numB) diversi++; } if(diversi >0)//quindi ci sono numeri diversi tra di loro out.write ("-"); else out.write(numElementi()); //secondo me l'errore è qui :-( //se devo processare altre righe,vado a capo if(i<numRighe-1) out.write('\n'); } } //il blocco finally viene eseguito SEMPRE,sia se c'è eccezione, sia se non si verifica alcuna eccezione finally { if(s!=null) s.close(); if(out!=null) out.close(); } } }

Rispondi quotando
