Ciao a tutti,
scrivo su questo forum perché riscontro un problema in un programma.
L'esercizio chiede di creare un portachiavi di un albergo, in cui ogni chiave deve essere identificata per nome e numero camera. Ogni cliente può depositare la chiave e poi prelevarla con nome o numero camera. Depositando una chiave, questa può essere posata nel primo posto disponibile del portachiavi.
Il mio problema è che alla creazione delle chiavi, se inserisco che voglio creare 2 o più chiavi (e quindi inserirò 2 o più nominativi), soltanto l'ultimo numero camera e l'ultimo nome, creeranno una chiave.
Vi lascio Main e le due classi "portachiavi" e "chiave".
public class JavaApplication11 {
public static void main(String[] args) {
Scanner tastiera = new Scanner(System.in); // scanner per input
int num_cam; // numero camera
int n; // numero massimo camere
String nom; // nominativo chiave
chiave schiave = null; // singola chiave di tipo chiave
int risp = 0; //numero chiavi da creare
System.out.print("Portachiavi \n");
System.out.print("Inserisci numero massimo chiavi: ");
n = tastiera.nextInt();
tastiera.skip("\n");
portachiavi portachiave = new portachiavi(n);
for(int i=0;i<n;i++){ // creazione chiavi con numero e nom inizializzato a null
System.out.print("Inserisci numero camera della chiave: ");
num_cam = tastiera.nextInt();
tastiera.skip("\n");
nom = null;
schiave = new chiave(nom, num_cam);
portachiave.setchiave(i, schiave); // inserimento chiavi in portachiave
}
System.out.print("Quante chiavi desideri creare ? ");
risp = tastiera.nextInt();
tastiera.skip("\n");
for(int i=0;i<risp;i++){
System.out.print("Inserisci nominativo chiave da creare: ");
nom = tastiera.nextLine();
schiave.setNom(nom);
portachiave.setchiave(n, schiave);
}
System.out.print(schiave.toString()); //toString usato solo per controllare i dati che inserisco.
}
}
public class portachiavi {
private int n; //dichiarazione dimensione
private chiave schiave[]; //dichiarazione vettore schiave
public portachiavi(int n) { //costruttore portachiavi
this.n = n;
this.schiave = new chiave[n];
}
public chiave getchiave(int i){
if(i<0 || i>n-1){
return null;
}
return schiave[i];
}
public boolean setchiave(int i, chiave lachiave){
if(i<0 || i>n-1){
return false;
}
schiave[i] = lachiave;
return true;
}
//metodi preleva chiave per nominativo e numero camera
public chiave prel_chiave_per_nom(String nom){
for(int i=0;i<n-1;i++){
if(nom.equals(schiave[n].getNom())){
chiave temp = schiave[i];
schiave[i] = null;
return temp;
} else {
}
}
return null;
}
public chiave prel_chiave_per_numcam(int num_cam){
for(int i=0;i<n-1;i++){
if(num_cam == schiave[n].getNum_cam()){
chiave temp = schiave[i];
schiave[i] = null;
return temp;
}
}
return null;
}
//metodo deposita chiave
public boolean dep_chiave(chiave chiave){
for(int i=0;i<n-1;i++){
if(schiave[i] == null){
schiave[i] = chiave;
return true;
}
}
return false;
}
@Override
public String toString(){
String elenco = "";
for(int i=0;i<n;i++){
if(schiave[i] != null){
elenco = elenco+schiave[i].getNum_cam()+" "+schiave[i].getNom()+"\n";
}
}
return elenco;
}
}
public class chiave {
private String nom;
private int num_cam;
public chiave(String nom, int num_cam) {
this.nom = nom;
this.num_cam = num_cam;
}
public chiave() {
this.nom = nom;
this.num_cam = num_cam;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getNum_cam() {
return num_cam;
}
public void setNum_cam(int num_cam) {
this.num_cam = num_cam;
}
@Override
public String toString(){
return "La chiave della stanza "+this.num_cam+" appartiene al cliente: "+this.nom+".";
}
}
Inserisco anche un output in modo che possiate capire in pratica il problema.
Portachiavi
Inserisci numero massimo chiavi: 5
Inserisci numero camera della chiave: 10
Inserisci numero camera della chiave: 11
Inserisci numero camera della chiave: 12
Inserisci numero camera della chiave: 13
Inserisci numero camera della chiave: 14
Quante chiavi desideri creare ? 2
Inserisci nominativo chiave da creare: Mario
Inserisci nominativo chiave da creare: Luigi
La chiave della stanza 14 appartiene al cliente: Luigi.
Come vedete, inserisco la capienza del portachiavi e i numeri delle camere. Creo 2 chiavi e inserisco i due nomi.
Il toString riporta solamente la creazione di una chiave con il secondo nominativo e l'ultimo numero camera.
Mi chiedo quindi, perchè non crea due chiavi ? E perché non usa le camere 10-11 al posto delle ultime ?
Spero di essere stato chiaro, grazie a chi mi risponderà.