[java] stampa a video

di il
14 risposte

[java] stampa a video

SAlve a tutti ho appena scritto un programma Agenda. Ora dovrei implementare un metodo che mostra l’elenco stampando a video solo, ad esempio, 10 righe per volta ma non ho idea di come fare!
Grazie a chi saprà darmi un consiglio

14 Risposte

  • Re: [java] stampa a video

    Cio Rossella, sono anche io un principiante, ma penso che dovresti mostrare il codice che hai scritto
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    SAlve a tutti ho appena scritto un programma Agenda. Ora dovrei implementare un metodo che mostra l’elenco stampando a video solo, ad esempio, 10 righe per volta ma non ho idea di come fare!
    Dovresti mostrare del codice. Poi dovresti descrivere meglio come si deve comportare quella stampa: 10 righe per volta nel senso che stampa 10 righe poi aspetta, che so .. un <invio> da tastiera per mostrare altre 10 righe e così via?

    P.S. non l'hai precisato ma presumo sia una applicazione "console", giusto?
  • Re: [java] stampa a video

    Vi allego parte del codice:

    Il metodo deve mostrare non più di 20 righe per volta su video e avanzare dopo il ricevimento di un comando INVIO da parte dell'utente

    package poo.util.generici;
    import java.io.*;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    import poo.agendina.*;

    public class GestioneAgendina {
    static Agendina agenda = new AgendinaVector();
    static String linea;
    static StringTokenizer st;
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
    System.out.println("Programma agenda telefonica");
    System.out.println("Inserire un nominativo:");
    String nome = sc.nextLine();
    String cognome = sc.nextLine();
    String prefisso = sc.nextLine();
    String telefono = sc.nextLine();
    Nominativo n = new Nominativo(cognome, nome, prefisso, telefono);
    agenda.aggiungi(n);
    comandi();
    ciclo: for (;;) {
    System.out.print(">");
    linea = sc.nextLine();
    st = new StringTokenizer(linea, " ");
    char comando = st.nextToken().charAt(0);
    switch (comando) {
    case 'Q':
    break ciclo;
    case 'A':
    aggiungiNominativo();
    break;
    case 'R':
    rimuoviNominativo();
    break;
    case 'T':
    ricercaTelefono();
    break;
    case 'P':
    ricercaPersona();
    break;
    case 'E':
    mostraElenco();
    break;
    case 'S':
    salva();
    case 'C':
    carica();
    default:
    errore();
    }
    }

    }

    private static void mostraElenco() throws IOException {
    }


    static void quit() throws IOException {
    System.out.println("Vuoi salvare il contenuto dell'agenda prima di terminare(y/n)?");
    String yesno = sc.nextLine();
    if (yesno.toLowerCase().equals("y")) {
    String nomeFile = null;
    do {
    try {
    System.out.println("nome file=");
    nomeFile = sc.nextLine();
    } catch (Exception e) {
    nomeFile = null;
    }
    if (nomeFile == null || nomeFile.length() == 0) {
    System.out.println("Errore di input. Ridare il nome del file.");
    }
    } while (nomeFile == null || nomeFile.length() == 0);
    try {
    agenda.salva(nomeFile);
    } catch (IOException ioe) {
    System.out.println("Errore salvataggio");
    }
    }
    }// quit

    private static void carica() throws IOException {
    String nomeFile = null;
    try {
    nomeFile = st.nextToken();
    } catch (Exception e) {
    System.out.println("Dati incompleti");
    return;
    }
    File f = new File(nomeFile);
    if (!f.exists()) {
    System.out.println("File inesistente!");
    return;
    }
    try {
    agenda.ripristina(nomeFile);
    } catch (IOException e) {
    System.out.println("Nessuna apertura");
    }
    }// carica

    private static void salva() throws IOException {
    String nomeFile = null;
    try {
    nomeFile = st.nextToken();
    } catch (Exception e) {
    System.out.println("Dati incompleti");
    return;
    }
    try {
    agenda.salva(nomeFile);
    } catch (IOException ioe) {
    System.out.println("Errore salvataggio");
    }
    }// salva


    private static void ricercaPersona() {
    try {
    String pref = st.nextToken();
    String tel = st.nextToken();
    Nominativo n = agenda.cerca(pref, tel);
    if (n == null)
    System.out.println(n.getCognome() + "" + n.getNome());
    } catch (Exception e) {
    System.out.println("Dati incompleti");
    }
    }// ricercaPersona

    private static void ricercaTelefono() {
    try {
    String cog = st.nextToken().toUpperCase();
    String nom = st.nextToken().toUpperCase();
    Nominativo n = agenda.cerca(new Nominativo(cog, nom, "", ""));
    if (n == null)
    System.out.println("Nominativo inesistente!");
    else
    System.out.println(n.getPrefisso() + "-" + n.getTelefono());
    } catch (Exception e) {
    System.out.println("Dati incompleti");
    }

    }

    static void aggiungiNominativo() {
    try {
    String cog = st.nextToken().toUpperCase();
    String nom = st.nextToken().toUpperCase();
    String pre = st.nextToken();
    String tel = st.nextToken();
    Nominativo n = new Nominativo(cog, nom, pre, tel);
    agenda.aggiungi(n);
    } catch (Exception e) {
    System.out.println("Dati incompleti");
    }
    }// aggiungiNominativo

    static void rimuoviNominativo() {
    try {
    String cog = st.nextToken().toUpperCase();
    String nom = st.nextToken().toUpperCase();
    agenda.rimuovi(new Nominativo(cog, nom, "", ""));
    } catch (Exception e) {
    System.out.println("Dati incompleti");
    } // rimuoviNominativo

    }

    static void comandi() {
    System.out.println();
    System.out.println("Comandi ammessi:");
    System.out.println("A(ggiungi cog nom pre tel");
    System.out.println("R(imuovi cog nom");
    System.out.println("T(elefono cog nom");
    System.out.println("P(ersona pre tel");
    System.out.println("E(lenco");
    System.out.println("S(alva nomefile");
    System.out.println("C(arica nomefile");
    System.out.println("Q(uit");
    System.out.println();
    }// comandi

    static void errore() {
    System.out.println("Comando sconosciuto");
    comandi();
    }

    }[/color]
    [/color][/color]
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    Vi allego parte del codice:
    Va beh, molte cose si potrebbero migliorare ...

    Rossella92 ha scritto:


    Il metodo deve mostrare non più di 20 righe per volta su video e avanzare dopo il ricevimento di un comando INVIO da parte dell'utente
    Non è difficile. Pensa: un ciclo for per iterare su tutti i nominativi. Nel corpo del for, prima di stampare il nominativo i-esimo, fai questo ragionamento: se i è maggiore di 0 E multiplo di 10 (o altro valore a tua scelta), chiedi un invio all'utente.
  • Re: [java] stampa a video

    Grazie mille! E se invece lo volessi fare con un bufferedReader?
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    Grazie mille! E se invece lo volessi fare con un bufferedReader?
    Intendi la lettura del <invio> ? Hai già lo Scanner connesso a System.in. Generalmente si usa o Scanner o BufferedReader connesso a System.in. Non va molto bene usare entrambi o mixare l'uso per leggere l'input un po' da uno e dall'altro.
  • Re: [java] stampa a video

    Capito si comunque intendevo utilizzare solo il buffereReader anche perchè non mi è molto chiaro il suo utilizzo.
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    Capito si comunque intendevo utilizzare solo il buffereReader anche perchè non mi è molto chiaro il suo utilizzo.
    BufferedReader è un pochino più ostico di Scanner per l'input da utente. Mentre Scanner ha nextInt(), nextDouble(), ecc.. BufferedReader non li ha.
    BufferedReader "sa" solo leggere a caratteri (in modo bufferizzato) e in modo specifico è in grado di leggere "righe" di testo. Tutto il resto come ad esempio interpretare una stringa ed ottenere un int è a tuo carico.
  • Re: [java] stampa a video

    Ad esempio per leggere le righe avrei potuto scrivere:
    public static void mostraElenco()throws IOException{
    BufferedReader br=new BufferedReader(new InputStreamReader((InputStream) agenda));
    String s=br.readLine();
    while(s!=null){
    System.out.println(s);
    s=br.readLine();
    }

    }
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    BufferedReader br=new BufferedReader(new InputStreamReader((InputStream) agenda));
    No, questo non ha senso.
    Che cosa è agenda?
  • Re: [java] stampa a video

    Agenda rappresenta un Vector di nominativi, che ho implementato in un’altra classe.
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    Agenda rappresenta un Vector di nominativi, che ho implementato in un’altra classe.
    Questa tua classe estende Vector, qualcosa del tipo:
    class Agenda extends Vector<Nominativo> {  .....  }
    oppure incapsula il Vector dei nominativi
    class Agenda {
        private Vector<Nominativo> nominativi;
      ......
    }
    ?

    Il primo scenario NON è particolarmente buono come design. Il secondo è ok.

    Se è il secondo caso, ci sono vari modi per poter "iterare" sui nominativi. Che vanno dal più banale (e meno bello) cioè di mettere un metodo che restituisce e quindi espone all'esterno direttamente il Vector interno .... fino a cose un po' più forbite del tipo rendere la classe Iterable<Nominativo> in modo che l'oggetto della tua agenda possa essere direttamente il target del for-each (introdotto in Java 5).
  • Re: [java] stampa a video

    Ti allego il codice cosi è più chiaro:
    public class AgendinaVector implements Agendina{
    private Vector<Nominativo> tabella;

    public AgendinaVector(){
    this(3);
    }


    public AgendinaVector(int i) {

    }


    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((tabella == null) ? 0 : tabella.hashCode());
    return result;
    }

    @Override
    public boolean equals(Object o) {
    if (!(o instanceof AgendinaVector)) return false;
    if(o==tabella) return true;
    AgendinaVector other = (AgendinaVector) o;
    if (tabella == null) {
    if (other.tabella != null)
    return false;
    } else if (!tabella.equals(other.tabella))
    return false;
    return true;
    }

    public void AgendinaContigua(int n){
    tabella=new ArrayVector<Nominativo>(n);
    }

    public int size(){
    return tabella.size();
    }

    public void svuota(){
    tabella.clear();
    }

    public void aggiungi(Nominativo nm){
    int i=Array.ricercaBinaria( tabella, nm );
    if( i>=0 ){ tabella.set(i,nm); return; }
    i=0;
    while( i<tabella.size() ){
    Nominativo x=(Nominativo)tabella.get(i);
    if( x.compareTo(nm)>0 ) break;
    i++;
    }
    tabella.add(i,nm); //inserisce n in posizione i
    }//aggiungi

    public void rimuovi(Nominativo nm){
    //ricerca nm nell'elenco, secondo l'ordinamento naturale
    int i=Array.ricercaBinaria(tabella,nm);
    if(i==-1)return;
    tabella.remove(i);
    }//remove

    public Nominativo cerca(Nominativo nm){
    int i=Array.ricercaBinaria(tabella,nm);
    if(i==-1) return null;
    return tabella.get(i);
    }//telefonoDi

    public Nominativo cerca(String prefisso, String telefono){
    for(int i=0;i<tabella.size();i++){
    Nominativo nm=tabella.get(i);
    if(nm.getPrefisso().equals(prefisso) && nm.getTelefono().equals(telefono))
    return nm;
    }
    return null;
    }//cerca

    public void salva(String nomeFile) throws IOException{
    PrintWriter pw=new PrintWriter(new FileWriter(nomeFile));
    for(int i=0;i<tabella.size();i++)
    pw.println(tabella.get(i));
    pw.close();
    }//salva

    public void ripristina(String nomeFile) throws IOException{
    tabella.clear();
    BufferedReader br=new BufferedReader(new FileReader(nomeFile));
    String linea=null;
    StringTokenizer st=null;
    String cog,nom,pre,tel;
    for(;;){
    linea=br.readLine();
    if(linea==null) break;
    st=new StringTokenizer(linea,"-");
    cog=st.nextToken();
    nom=st.nextToken();
    pre=st.nextToken();
    tel=st.nextToken();
    Nominativo n=new Nominativo(cog,nom,pre,tel);
    this.aggiungi(n);
    }
    }//ripristina

    public String toString(){
    StringBuilder sb=new StringBuilder(500);
    for(int i=0;i<tabella.size();i++)
    sb.append(tabella.get(i)+"\n");
    return sb.toString();
    }//toString

    @Override
    public Iterator<Nominativo> iterator() {
    // TODO Auto-generated method stub
    return null;
    }






    }
  • Re: [java] stampa a video

    Rossella92 ha scritto:


    Ti allego il codice cosi è più chiaro:
    Ci sono svariate cose non particolarmente buone nel tuo codice ... ma beh, capisco.

    Comunque hai messo il iterator() con @Override, quindi presumo (non è evidente dal codice) che Agendina (cioè la interfaccia) sia a sua volta Iterable<Nominativo> .

    Se così, nel tuo iterator() ti basta fare:
    return tabella.iterator();
    In questo modo un oggetto AgendinaVector può essere direttamente il target del "for-each" di Java 5+.

    for (Nominativo nom : agenda) { ...... }

    Tutto qui.
Devi accedere o registrarti per scrivere nel forum
14 risposte