Aiuto esercizi FILE

di il
12 risposte

Aiuto esercizi FILE

Buongiorno a tutti, oggi sono qui perché vorrei capire esattamente come funzionano i programmi FILE... Ad esempio l'esercizio svolto che propongo dice:

Scrivere un programma che dapprima trascriva su un file di nome “file1” una sequenza di numeri compresi tra 32 e 126, come ad esempio
97, 60, 116, 34, 62, 99, 60, 114, 62, 60, 73, 67, 62, 75
e dopo, leggendo da “file1”, trascriva su un secondo file, di nome “file2”, solo i numeri che sono compresi tra un’occorrenza del numero 60 e un’occorrenza del numero 62.
Ad esempio, nel caso sopra il file “file2” risultante dovrebbe contenere:
116, 34, 114, 73, 67
Nota: si ipotizzi che nell’array la prima occorrenza di 60 preceda la prima occorrenza di 62 e che tra una occorrenza di 60 e la prima occorrenza di 62 ad essa successiva non vi siano altre occorrenze di 60.

Promemoria sull’uso della classe RandomAccessFile (dal package java.io)
• Apertura del file: metodo costruttore RandomAccessFile(“nome file”, “rw”)
• Scrittura sul file: metodo void write(int)
• Lettura dal file: metodo int read() (ritorna numero letto oppure -1 se raggiunta la fine del file)
Chiusura: metodo void close()




LA SOLUZIONE è:


import java.io.*;
 
public class EsercizioA3 {
?public static void main(String[] args) throws Exception {
?int[] vettore = {97, 60, 116, 34, 62, 99, 60, 114, 62, 60, 73, 67, 62, 75};
?RandomAccessFile file1, file2;
?int i;
?int b;
?boolean sequenza = false;
?
?file1 = new RandomAccessFile("file1.txt", "rw");
?for(i = 0; i < vettore.length; i++)
?file1.write(vettore[i]);
?file1.close();
 
?file1 = new RandomAccessFile("file1.txt", "rw");?
?file2 = new RandomAccessFile("file2.txt", "rw");?
?for(b = file1.read(); b != -1; b = file1.read()) {
?if (b == 60 || b == 62) {
?sequenza = !sequenza;
?}
?else if (sequenza)
?file2.write(b);
?}?
?file1.close();
?file2.close();
?}
}
 

BENE...il mio problema è qui:

?file1 = new RandomAccessFile("file1.txt", "rw");?
?file2 = new RandomAccessFile("file2.txt", "rw");?
?for(b = file1.read(); b != -1; b = file1.read()) {
?if (b == 60 || b == 62) {
?sequenza = !sequenza;
?}
?else if (sequenza)
?file2.write(b);
?}?
Quel ciclo for, in sostanza, serve per leggere il file, vero? Ovvero lo scansiona?

L'IF usato serve per dire: se trovi un 60 o un 62 sequenza=!sequenza...ovvero, se trovi uno di questi due numeri FERMATI NEL LEGGERE IL FILE ?

e poi non riesco a capire in questo caso l' ELSE seguito da un altro IF (sequenza)...perché mette sequenza ??

Grazie scusate per i mille dubbi ma sono una frana in Java

12 Risposte

  • Re: Aiuto esercizi FILE

    La variabile sequenza serve a capire quali valori trascrivere. Tu vuoi tutti i valori tra 60 e 62:
    dunque, se incontro un 60 o un 62, pongo sequenza = !sequenza, ovvero: se sequenza è false (non ho ancora incontrato la mia sequenza) la pongo a true (inizia la sequenza); viceversa, se ho già trovato la sequenza, da true passa a false (la sequenza è terminata).
    Se il valore è diverso da 60 o 62, e se mi trovo all'interno della sequenza (sequenza == true), allora scrivi su file tale valore.
  • Re: Aiuto esercizi FILE

    tuixte ha scritto:


    La variabile sequenza serve a capire quali valori trascrivere. Tu vuoi tutti i valori tra 60 e 62:
    dunque, se incontro un 60 o un 62, pongo sequenza = !sequenza, ovvero: se sequenza è false (non ho ancora incontrato la mia sequenza) la pongo a true (inizia la sequenza); viceversa, se ho già trovato la sequenza, da true passa a false (la sequenza è terminata).
    Se il valore è diverso da 60 o 62, e se mi trovo all'interno della sequenza (sequenza == true), allora scrivi su file tale valore.

    Ok gazie mille per le delucidazioni! Se invece volessi stampare a video i numeri che sono seguiti da un numero pari, come devo fare? Mi sto scervellando ma non riesco uff....

    I numeri che dà il problema sono: 97, 60, 116, 103, 62, 99, 60, 114, 62, 60, 73, 67, 62, 75

    Questa volta chiede che prima vengano trascritti su un file di nome "dati", e poi devono essere letti per stampare a video la sequenza qui sotto.

    La sequenza dovrebbe risultare 97, 60, 103, 99, 60, 114, 62, 67

    Allora io ho fatto così ...
    ?
    ?for(b = file.read(); b != -1; b = file.read()) {
    ?if ((b+1)%2==0||(b+1)%2!=0) {
    ?sequenza = !sequenza;
    ?}
    ?else if (sequenza)
    ?file.write(b);
    
    System.out.println (b);
    ?}?

    Solo che facendo così mi stampa di nuovo l'array di partenza

    Dove sbaglio? Nella condizione if metto che se il numero successivo è pari, allora trascrivo il numero su file...oppure se trova quello dopo dispari sequenza diventa false...
  • Re: Aiuto esercizi FILE

    Daniele91 ha scritto:


    Nella condizione if metto che se il numero successivo è pari, allora trascrivo il numero su file...oppure se trova quello dopo dispari sequenza diventa false...
    Non è vero.
    La tua condizione è:
    ?if ((b+1)%2==0||(b+1)%2!=0) {
    ?sequenza = !sequenza;
    ?}
    Il che vuol dire: Se il numero (b+1) è pari oppure è dispari, allora inverti il valore di 'sequenza'.
    Ma qualsiasi numero sarà sempre pari o dispari!

    Inoltre, b è il numero letto dal file, mettiamo sia il primo, 97. Fare b+1 non ti dà il numero successivo nella sequenza, bensì 97+1=98.
  • Re: Aiuto esercizi FILE

    tuixte ha scritto:


    Daniele91 ha scritto:


    Nella condizione if metto che se il numero successivo è pari, allora trascrivo il numero su file...oppure se trova quello dopo dispari sequenza diventa false...
    Non è vero.
    La tua condizione è:
    ?if ((b+1)%2==0||(b+1)%2!=0) {
    ?sequenza = !sequenza;
    ?}
    Il che vuol dire: Se il numero (b+1) è pari oppure è dispari, allora inverti il valore di 'sequenza'.
    Ma qualsiasi numero sarà sempre pari o dispari!

    Inoltre, b è il numero letto dal file, mettiamo sia il primo, 97. Fare b+1 non ti dà il numero successivo nella sequenza, bensì 97+1=98.

    Ah caspita ecco perché non mi veniva...ma quindi come faccio a imporre la condizione che riguarda il numero successivo ? Devo andare nel primo ciclo for del 'rw'? Ovvero quando ancora sto trascrivendo ?
  • Re: Aiuto esercizi FILE

    Puoi utilizzare due variabili.
    Primo, leggi il primo valore da file e la metti in b1. Poi, all'interno del ciclo for, leggi i valori partendo dal secondo valore, e lo poni in b2; a questo punto hai i primi due valori. Alla fine del ciclo, poni in b1 il valore di b2; il ciclo provvederà a porre il successivo numero da analizzare in b2.
    In pratica una cosa del genere:
    b1 = file.read();
    for(b2 = file.read(); b2 != -1; b2 = file.read()){
    ...
    b1 = b2;
    }
  • Re: Aiuto esercizi FILE

    tuixte ha scritto:


    Puoi utilizzare due variabili.
    Primo, leggi il primo valore da file e la metti in b1. Poi, all'interno del ciclo for, leggi i valori partendo dal secondo valore, e lo poni in b2; a questo punto hai i primi due valori. Alla fine del ciclo, poni in b1 il valore di b2; il ciclo provvederà a porre il successivo numero da analizzare in b2.
    In pratica una cosa del genere:
    b1 = file.read();
    for(b2 = file.read(); b2 != -1; b2 = file.read()){
    ...
    b1 = b2;
    }

    Cioè faccio:
    
    Int b1;
    int b2;
    
    b1=file.read();
     for (b2=file.read(); b!=-1; b2= file.read() ){
     if (b2%2==0)
          sequenza=!sequenza;
    
    else if (sequenza)
               file.write (b1)
          b1=b2;
    }
    System.out.println (b1);
    
    file.close();
    
    Però così mi stampa solo 97 ((
  • Re: Aiuto esercizi FILE

    A te non interessa più parlare di sequenza di numeri.. semplicemente, se b2 è pari, allora salva b1.
  • Re: Aiuto esercizi FILE

    Ahhh ok grazie infinite !!stasera quando torno a casa proverò a rifarlo, ora sono fuori per lavoro, ciao! E grazie ancora
  • Re: Aiuto esercizi FILE

    Di nulla, se hai atri dubbi siamo qui
  • Re: Aiuto esercizi FILE

    Buonasera , ho provato a rifarlo ma non va

    Int b1;
    int b2;
    
    b1=file.read();
    for (b2=file.read(); b2!=-1; b2= file.read() ){
    if (b2%2==0)
          file.write(b1)
    
          b1=b2;
    }
    System.out.println (b1);
    
    file.close();
  • Re: Aiuto esercizi FILE

    "Non va" cosa vuol dire?
  • Re: Aiuto esercizi FILE

    tuixte ha scritto:


    "Non va" cosa vuol dire?
    Mi stampa una sequenza a caso...o meglio, riesco a stampare i primi tre:(
Devi accedere o registrarti per scrivere nel forum
12 risposte