Allineamento Array-File

di il
1 risposte

Allineamento Array-File

Buonasera,

sto provando un codice che memorizza su una variabile arrayList dei dati passati da tastiera.
All'interno di un ciclo while, se una certa condizione è verificata continua a immagazzinare dati poi ad un certo punto esce.

il primo problema è che non ho la memorizzazione allineata, mi stampa questo esempio
[ a, b, c
, d, e, f
]

ogni riga (a,b,c) rappresenta una fine del while, se il while rinizia allora memorizza la seconda riga (d,e,f)
io vorrei che memorizzasse i dati in colonna.

Un secondo problema è che quando li passo su un file li memorizza tutti in riga, come posso risolvere a questi due problemi ?
posto il codice
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package prova;


import java.io.FileNotFoundException;
import java.io.PrintWriter;
import static java.lang.System.in;
import java.util.ArrayList;
import java.util.Scanner;


public class Prova {

    private static String s;
    private static String data;
    private static String employee;
    public static void main(String[] args) {
        
        ArrayList<String> nameList = new ArrayList<>(); // sostituire string con Impiegati
        //Impiegati name ecc
        System.out.println("Vuoi inserire un impiegato ? <si> <no>");
        Scanner input = new Scanner(System.in);
        s = input.next();
        while(s.equals("si")){
            System.out.println("Che tipo di impiegato vuoi inserire ? <Dirigenti> <Consulenti> <Segretarie> ");
            employee = input.next();
            switch (employee) {
                case "Dirigenti":
                    System.out.println("Inserisci il nome del DIRIGENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci il cognome del DIRIGENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci la data di nascita del DIRIGENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci lo stipendio del DIRIGENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci il premio produzione del DIRIGENTE");
                    data = input.next() + "\n";
                    nameList.add(data);
                    break;
                case "Consulenti":
                    System.out.println("Inserisci il nome del CONSULENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci il cognome del CONSULENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci la data di nascita del CONSULENTE");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci lo stipendio del CONSULENTE");
                    data = input.next() + "\n";
                    nameList.add(data);
                    break;
                case "Segretarie":
                    System.out.println("Inserisci il nome della SEGRETARIA");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci il cognome della SEGRETARIA");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci la data di nascita della SEGRETARIA");
                    data = input.next();
                    nameList.add(data);
                    System.out.println("Inserisci lo stipendio della SEGRETARIA");
                    data = input.next() + "\n";
                    nameList.add(data);
                    break;
            }
            System.out.println("Vuoi inserire un altro impiegato ? <si> <no>");
            s = input.next();
        }      
        
        System.out.println(nameList); // Problema dell' allineamento dei dati inseriti !!
        
        
        try (PrintWriter openFile = new PrintWriter("openFile.txt")){    // Creazione file           
        System.out.println("\n\nScrittura File...in corso ");
        openFile.println(nameList);
        System.out.println("\n\nScrittura File...terminata ");
        openFile.close();
        }catch(FileNotFoundException e){
            System.out.println("Il file di input non esiste");
        }
    }         
}
   

1 Risposte

  • Re: Allineamento Array-File

    manuel__89 ha scritto:


    il primo problema è che non ho la memorizzazione allineata, mi stampa questo esempio
    [ a, b, c
    , d, e, f
    ]

    ogni riga (a,b,c) rappresenta una fine del while, se il while rinizia allora memorizza la seconda riga (d,e,f)
    io vorrei che memorizzasse i dati in colonna.
    Innanzitutto hai messo tu esplicitamente dei \n (che tra l'altro NON denotano il "newline" in generale in senso multi-piattaforma).

    data = input.next() + "\n";

    e già questo non è buono e non ha granché senso.

    E poi comunque non ha granché senso memorizzare in sequenza lineare (cioè nel ArrayList) dati di significato promiscuo (es. nome poi cognome ... poi di nuovo nome, cognome, ecc...)

    E comunque System.out.println(nameList); stampa il risultato del toString() di ArrayList e questo non "incolonna" un bel niente. Se volessi un output incolonnato e ben formattato, devi farlo tu con più codice.

    manuel__89 ha scritto:


    Un secondo problema è che quando li passo su un file li memorizza tutti in riga
    Idem, anche qui scrivi il risultato del toString() del ArrayList. E il fatto che contiene dei line-feed ASCII (che su Windows NON vuol dire "newline") porta appunto ad avere tutto su una unica riga se osservi il file aperto es. con Notepad di Windows.
Devi accedere o registrarti per scrivere nel forum
1 risposte