PDA

View Full Version : Problema nel vettore


hunterground
14-07-2005, 21:58
Ho provato a fare un po il programma ma ho questo problema, quando mi chiede di inserire N , lo inserisco ma nn mi fa partire il ciclo per caricare il vettore.


Questa è la classe creata Autocarri

import java.io.*;
class Autocarri
{
private int[] V;
int N;
private int chilometri_percorsi;

public Autocarri(int i)
{
V=new int [N];

}
public void Inserimento()
{
InputStreamReader In = new InputStreamReader(System.in);
BufferedReader Tastiera = new BufferedReader(In);
try
{
System.out.println("Inserisci N:");
N=Integer.parseInt(Tastiera.readLine());

for(int i=0;i<N;i++)
{

System.out.println("Inserisci:");
V[i]=Integer.parseInt(Tastiera.readLine());
}
}

catch (Exception E)
{

}


}
}



Mentre questa è il test della classe

class TestAutocarri
{
public static void main(String args[])
{

try
{
Autocarri Z1= new Autocarri(10);
Z1.Inserimento();

}
catch(Exception E)
{

}

}
}

Mixmar
15-07-2005, 06:52
Ci sono due problemi nel tuo codice:

1 - Innanzitutto, passi al costruttore Autocarri(int i) un parametro che poi non usi da nessuna parte: forse intendevi scrivere Autocarri(int N).

2 - Poi c'è un problema più di fondo: quando tu, nella classe TestAutocarri, crei un'istanza della tua classe Autocarri, il primo metodo invocato è ovviamente il costruttore, che inizializza il vettore V alla dimensione specificata; poi, quando invochi Inserimento, richiedi all'utente il valore di N (che hai già scelto tu!): l'utente deve perciò "indovinare" il valore che tu hai scritto nel codice (10 in questo caso): se ne sceglie uno più piccolo, riempirà solo un po' il vettore, se ne sceglie uno più grande il programma andrà in errore con un IndexOutOfBound (o qualcosa di simile :D ) exception (che tu non vedi perchè non fai nulla nella catch).

Magari la tua è una scelta voluta: impostare 10 come lunghezza massima e lasciare scegliere l'utente, male che vada imposterà un valore più alto e finirà intrappolato nella catch: però in questo caso sarebbe forse meglio gestire l'errore, visto che è così semplice. Basta un


if (N <= this.N) {
// tua esecuzione
else {
System.out.println("Superato il massimo numero di elementi consentito. N deve essere minore o uguale a " + this.N);
}


o qualcosa di simile...