Domanda ArrayList e Classi

Stato
Discussione chiusa ad ulteriori risposte.

Hamzinho

Utente Bronze
15 Febbraio 2016
9
6
0
31
Salve ragazzi,

Ho un problema che non riesco a risolvere, io dovrei inserire una nuova voce nella rubrica costituita da un ArrayList chiamato menu. La nuova voce è costituita da un nome e un numero di cellulare. Il problema vi è quando vado a creare questa nuova voce con i dati inseriti dall' utente. Scusate ma non so proprio come spiegaverlo meglio.


Programma principale:

import java.util.*;

public class Rubrica{

static Scanner scan = new Scanner(System.in);

public static void main(String[]args){

int posizione=0;

//creazione ArrayList con la classe involucro VociRubrica

ArrayList <String> menu = new ArrayList <String>();

//creazione menu

System.out.println("1: Aggiungi nuova voce in rubrica");

System.out.println("2: Ricerca per nome");

System.out.println("3: Stampa rubrica completa");

System.out.println("0: Esci dal programma");



//scelta dell'opzione

for(int i=0; i>=0; i++){

System.out.println("Scegli l'opzione desiderata: ");

int richiesta = scan.nextInt();

//gestione dell'errore in caso di inserimento sbagliato

if(richiesta < 0 || richiesta > 3){

System.out.println("Errore di inserimento, scegliere un numero compreso tra 0 e 3: ");

richiesta = scan.nextInt();

}



switch(richiesta){

//inserimento di una nuova voce in rubrica

case 1:



//controllo che non ci sia un' altra voce uguale a quella inserita



do{

System.out.println("Inserire il nome: ");

String nome = scan.next();

System.out.println("Inserire numero di cellulare: ");

String numCell = scan.next();

VociRubrica nuovaVoce = new VociRubrica(nome, numCell);

posizione = menu.indexOf(nome);

if(posizione!=-1){

System.out.println("La voce inserita e' gia esistente, inserirne un altra: ");

}

}while(posizione==-1);

menu.add(new VociRubrica(nuovaVoce));

System.out.println("La voce e' stata inserita correttamente nella rubrica");



break;


Classe VociRubrica:


import java.util.*;


public class VociRubrica{

private String nome, numCell;

public VociRubrica(String nome, String numCell){

this.nome = nome;

this.numCell = numCell;

}



public String getNome(){

return nome;

}

public String getNumCell(){

return numCell;

}

public void setNome(String nome){

this.nome = nome;

}

public void setNumCell(String numCell){

this.numCell = numCell;

}

}


Il problema è il seguente:

Rubrica.java:47: error: constructor VociRubrica in class VociRubrica cannot be applied to given types;

VociRubrica nuovaVoce = new VociRubrica(nome, numCell);

^

required: no arguments

found: String,String

reason: actual and formal argument lists differ in length

Rubrica.java:54: error: cannot find symbol

menu.add(new VociRubrica(nuovaVoce));

^

symbol: variable nuovaVoce

location: class Rubrica


Scusate se commetterò errori ma sono nuovo di questo Forum.

Grazie in anticipo
 
Tralasciamo un attimo le parentesi mancanti

do{

....

VociRubrica nuovaVoce = new VociRubrica(nome, numCell);

.....

}while(posizione==-1);

menu.add(new VociRubrica(nuovaVoce));
......

Primo errore: dichiari la variabile nuovaVoce in un ciclo do-while e poi la utilizzi fuori dal ciclo, generando un errore di scope.
Ti consiglio
VociRubrica nuovaVoce;
do{
....
nuovaVoce = new VociRubrica(nome, numCell);

Inoltre non hai un costruttore di VociRubrica che accetti un oggetto VociRubrica. Io ti consiglio quindi

menu.add(nuovaVoce);

ArrayList<String> menu=

Hai dichiarato menu per memorizzare stringhe e poi memorizzi VociRubrica? Cambia in

ArrayList<VociRubrica> menu

Con queste modifiche non ho problemi per la compilazione. Fammi sapere
 
Giusto perché l'ho notato solo adesso ma questa dichiarazione e inizializzazione:
ArrayList <String> menu = new ArrayList <String>();
È meglio definirla come:
Java:
List<String> menu = new ArrayList<>();
In questo modo se cambi implementazione della lista puoi sfruttare l'astrazione e non cambiare il resto del codice.
 
Stato
Discussione chiusa ad ulteriori risposte.