Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Non mi effettua le stampe (?) molto strano

    Ciao a tutti forumiani ho creato un programmino per esercitarmi ma non riesco a far stampare le stringhe all'interno del secondo file... quelle all'interno del metodo generaFile vengono stampate normalmente, le altre no.

    So che il codice l'avrei potuto scrivere in molte meno righe... ma è giusto per divertimento nulla di serio

    Main
    codice:
    package esercizio1;
    
    import java.io.IOException;
    import java.util.NoSuchElementException;
    import java.util.Scanner;
    
    
    public class Main {
        public static void main(String[] args) throws IOException{
            Classe file = new Classe ();
            System.out.print("Nome file: ");
            try {
                Scanner in = new Scanner (System.in);
                String nomeFile = in.next();
                file.generaFile(nomeFile);
                System.out.println("Stampa linee numeriche...");
                file.stampaLineeNumeriche(nomeFile);
                System.out.println("Stampa linee con numero...");
                file.stampaLineeConNumero(nomeFile);
                System.out.println("Quale lettera vuoi cercare? ");
                char lettera = in.next().charAt(0);
                file.stampaLineeConLetterePari(nomeFile, lettera);
                char lettera1 = in.next().charAt(0);
                char lettera2 = in.next().charAt(0);
                System.out.println("Stampa linee con numero uguale...");
                file.stampaLineeConNumeroUguale(nomeFile, lettera1, lettera2);
                in.close();
            }catch(NoSuchElementException ecc) {
                ecc.getMessage();
            }
        }
    }
    Classe
    codice:
    package esercizio1;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.regex.Pattern;
    
    
    public class Classe {
        
        private BufferedReader leggi;
        private BufferedWriter scrivi;
        private Random random = new Random();
        
        public Classe () {
            //VOID
        }
        
        public void stampaLineeConNumeroUguale (String nomeFile, char lettera1, char lettera2) throws IOException{
            List<String> file = leggiFile(nomeFile);
            for(String it:file) 
                if(controllaOccorrenzaSimultanea(it, lettera1, lettera2))
                    System.out.println("I caratteri: " + lettera1 + " && "+ lettera2 + " sono contenute lo stesso numero di volte nella stringa: " + it);
        }
        
        public boolean controllaOccorrenzaSimultanea(String s, char l1, char l2) {
            int n1 = 0, n2 = 0;
            int le1 = (int) l1;
            int le2 = (int) l2;
            for(int i = 0 ; i < s.length() ; i++) {
                int n = (int)s.charAt(i);
                if(n == le1)    n1++;
                else if(n == le2)    n2++;
            }
            if(n1 == n2) return true;
            return false;
        }
        
        public void stampaLineeConLetterePari (String nomeFile, char lettera) throws IOException {
            List<String> file = leggiFile(nomeFile);
            for(String it:file)
                if(letterePari(it, lettera))
                    System.out.println("La lettera " + lettera + " è presente n-pari volte nella parola " + it);
        }
    
    
        public boolean letterePari (String s, char l) {
            if(Pattern.matches("("+l+l+")+", s)) // la lettera l deve essere presente (ll)+
                return true;
            return false;
        }
        
        public void stampaLineeConNumero (String nomeFile) throws IOException {
            List<String> file = leggiFile(nomeFile);
            for(String it:file)
                if(Pattern.matches("[0-9]+", it))
                    System.out.println("La stringa: " + it + " contiene almeno un numero.");
        }
        
        public void stampaLineeNumeriche (String nomeFile) throws IOException {
            List<String> file = leggiFile(nomeFile);
            for(String it:file)
                if(controlla(it))
                    System.out.println("Numero rilevato: " + it);
        }
    
    
        public boolean controlla (String s) {
            try {
                Integer.parseInt(s);
            }catch(NumberFormatException ecc) {
                ecc.getMessage();
                return false;
            }
            return true;
        }
        
        public List<String> leggiFile(String nomeFile) throws IOException{
            System.out.println("Leggo il programma...");
            List<String> toReturn = new ArrayList<String> ();
            try {
                leggi = new BufferedReader (new FileReader (nomeFile));
            }catch(FileNotFoundException ecc) {
                ecc.getMessage();
            }
            while(leggi.ready())
                toReturn.add(leggi.readLine());
            System.out.println("Programma letto.");
            return toReturn;
        }
        
        public void generaFile (String nomeFile) throws IOException {
            int numero;
            String stringa;
            try {
                scrivi = new BufferedWriter(new FileWriter (nomeFile));
            }catch(FileNotFoundException ecc) {
                ecc.getMessage();
            }
            Scanner in = new Scanner (System.in);
            for(int i = 0 ; i < 5 ; i++) {
                numero = random.nextInt();
                stringa = "" + numero + "\n";
                scrivi.append(stringa);
                System.out.print("Inserisci stringa: ");
                stringa = in.next();
                scrivi.append(stringa + "\n");
            }
            in.close();
        }
        
    }
    Confido nella forza
    asd il corrispondente italiano di lol (lot of laught) non ha un significato è usato nei giochi di ruolo online perche la destra è impegnata nel movimento del personaggio

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da NoNameoN Visualizza il messaggio
    quelle all'interno del metodo generaFile vengono stampate normalmente, le altre no.
    A parte un sacco di cose inutili o che non hanno senso ... c'è una cosa che NON hai fatto. Non hai "chiuso" il BufferedWriter nel generaFile. E siccome BufferedWriter è bufferizzato e tu hai scritto molto poco (una manciata di righe), si è tenuto tutto in memoria e non ha scritto fisicamente nulla sul file (il file è lungo .... 0 byte!).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    A parte che avevo scritto (anche in grassetto ) "So che il codice l'avrei potuto scrivere in molte meno righe... ma è giusto per divertimento nulla di serio "

    Ho risolto chiudendo il BufferedWriter comunque ti notifico che ha scritto tutto ciò che c'era da scrivere sul file (anche se in alcuni casi ha scritto valori non previsti ma perché ho sbagliato altro)... non capisco cosa c'entra il fatto che sia corto .... 0 byte! con il mal funzionamento...

    Comunque grazie per avermi aiutato
    asd il corrispondente italiano di lol (lot of laught) non ha un significato è usato nei giochi di ruolo online perche la destra è impegnata nel movimento del personaggio

Tag per questa discussione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.