Domanda Problema con programma

Stato
Discussione chiusa ad ulteriori risposte.

PandorumTeam

Utente Electrum
26 Giugno 2011
204
30
24
126
Ultima modifica:
Ciao ragazzi,

allora ho realizzato un piccolo programma in java che si occupa di gestire una rubrica telefonica.
Tramite un menu, l'utente decide cosa selezionare. Solo che ho un po' di problemi.

Vi inserisco le 2 classi che ho realizzato:

Codice:
import java.util.Scanner;
public class Rubrica 
{


    public static void main(String[] args)throws java.lang.Exception
    {
        Scanner leggi = new Scanner(System.in);
        int menu = 0;


        do{
    
        
        
        System.out.println("Benvenuto nel menu");
        System.out.println("1) Inserisci contatto");
        System.out.println("2) Dimensione iniziale");
        System.out.println("3) Dimensione dopo inserimenti");
        System.out.println("4) Cerca contatto");
        System.out.println("5) toString");
        System.out.println("6) Esci");
        
        menu = leggi.nextInt();
        
        
        
        Schede k = new Schede(); //oggetto per comunicare con la classe oggetto
        
        
        switch(menu)
        
        {
        
        case 1:
            
            String contatto = null;
            int numero;
            System.out.print("Inserisci contatto: ");
            contatto = leggi.next();
            System.out.print("Inserisci numero: ");
            numero = leggi.nextInt();
            
            k.inserisci(contatto, numero); //passo come parametro ad inserisci
        
            break;
        
        case 2:
            System.out.println("Dimensione iniziale: " + k.getDimensione ()); 
            break;
            
        case 3:
            k.getDimensione();
            break;
            
        case 4:
            String inserito = null;
            System.out.println("Inserisci il contatto da cercare");
            inserito = leggi.next();
            System.out.print("Cercando " + inserito + " ottengo: "); 
            int n = k.trovaNumero (inserito); 
            if(n == -1)
            { 
            System.out.println ("Nessuna corrispondenza trovata"); 
            }
            else
            { 
            System.out.println (n); 
            } 
            break;
            
        case 5:
            System.out.println ("Ora invoco il toString:\n\n\n" + k.toString ()); 
            break;
            
        case 6:
            break;
        
        }
        }while(menu !=6);
         
    }


}

Nella prima classe ho creato il menu con i vari casi, e un oggetto che mi permette di comunicare con quest'altra classe (contenente i metodi):

PHP:
public class Schede
{


    private final int dim=100; 
    private String [] nomeRubrica; 
    private int [] numeroRubrica; 
    private int posizione; 
    
    public Schede()
    { 
    nomeRubrica=new String [dim]; 
    numeroRubrica=new int [dim]; 
    posizione=0; 
    } 
    
    public int trovaNumero (String nominativo)
    { 
    int i=0; 
    while(i<posizione){ 
    if(nominativo.equals (nomeRubrica[i]) )
    { 
    return numeroRubrica [i]; 
    } 
    } 
    return -1; 
    } 


    public boolean inserisci (String nominativo , int numero)
    { 
    if(posizione < 100)
    { 
    nomeRubrica [posizione] = nominativo; 
    numeroRubrica [posizione] = numero; 
    posizione++; 
    return true; 
    }
    else
    { 
    return false;  
    }   
    } 


    public int getDimensione (){ 
    System.out.println(posizione);
    return posizione; 
    } 


    public String toString (){ 
    StringBuilder sb=new StringBuilder (); 
    sb.append("La rubrica contiene "+ posizione + " numerin"); 
    for(int i=0;i<posizione;i++){ 
    sb.append(nomeRubrica [i]+" "+numeroRubrica [i]+"\n"); 
    } 
    return sb.toString (); 
    }

Le cose che non vanno sono le seguenti:

Inserisci contatto, dimensione dopo inserimenti, cerca contatto, e toString. Probabilmente il to String e il cerca contatto non vanno perché inserisci contatto è buggato. Non so perché non funziona, ma se passo tutto direttamente come parametro, aggiungendo il contatto via codice e con una classe, il programma funziona.
Chi può illuminarmi?

PS: ho inserito l'altra classe tra i tag php giacché inserendola nei tag code non viene creato un nuovo box; penso sia un bug di inforge.
 
Le cose che non vanno sono le seguenti:

Inserisci contatto, dimensione dopo inserimenti, cerca contatto, e toString. Probabilmente il to String e il cerca contatto non vanno perché inserisci contatto è buggato. Non so perché non funziona, ma se passo tutto direttamente come parametro, aggiungendo il contatto via codice e con una classe, il programma funziona.
Chi può illuminarmi?
Esatto, tutti i problemi sono legati e li puoi risolvere tutti in un colpo. Hai sbagliato nel definire l'istanza di Schede dentro al ciclo do-while, praticamente ad ogni ciclo il tuo oggetto k viene creato e distrutto, di conseguenza perde tutte le modifiche che gli avevi fatto. Sposta Schede k = new Schede(); fuori dal do-while e tutto prenderà a funzionare.

Altri consigli:
Questo mi sembra più comodo, è una feature del java
Codice:
    private final int dim=100;
    private String[] nomeRubrica = new String[dim];
    private int[] numeroRubrica = new int[dim];                
    private int posizione = 0;

    public Schede()
    {
    }
Visto che non devi fare delle operazioni aritmetiche è meglio definire numeroRubrica come String, questo vale in generale, ma giusto per farti capire il perché basta pensare che un numero telefonico può iniziare con lo 0 (che nel tuo caso andrebbe perso) e può superare la dimensione massima di un intero.
Al posto degli array semplici potresti usare una SortedMap: già predisposta per un'associazione tra due elementi e ha una dimensione dinamica.
 
  • Mi piace
Reazioni: PandorumTeam
Ultima modifica:
Wow come ho fatto a non pensarci subito. Ora va tutto alla grande.
Non so come fai, ma risolvi sempre i miei problemi; continua così.
Grazie e buona serata :)
 
Stato
Discussione chiusa ad ulteriori risposte.