Programma java
ciao a tutti, devo svolgere questo esercizio:
"scrivere un programma che memorizzi un array A di k elementi di tipo double, e che successivamente calcoli e stampi il numero di elementi di A minori di 0"
anche se nella traccia non è esplicitamente richiesto ho messo che la dimensione k va inserita da tastiera e i singoli elementi dell'array devono essere dati da tastiera dall'utente.
cercando l'errore ho dedotto che l'errore è nell'inserimento degli elementi perchè, provando a creare il vettore dando gli elementi direttamente nel codice, viene compilato correttamente e anche l'output è corretto.
import java.io.*;
public class arrayNminori0 {
public static void main(String[] args) throws IOException{
int i;
int cont=0;
int k=0;
double []A= new double[k];
//inserimento della dimensione da tastiera
InputStreamReader In= new InputStreamReader(System.in);
BufferedReader Tastiera= new BufferedReader (In);
System.out.print("immettere dimensione: ");
k=Integer.parseInt(Tastiera.readLine());
//ciclo per inserire gli elementi
for(i=0; i
{
System.out.print("valore di A: ");
A=Integer.parseInt(Tastiera.readLine());
}
//stampa
for(i=0; i
{
System.out.println(A);
}
//ciclo che li scorre e conta quelli minori di 0
for(i=0; i
{
if(A<0)
cont++;
}
//stampa numero di elementi minori di 0
System.out.print(cont);
}
}
grazie mille!
"scrivere un programma che memorizzi un array A di k elementi di tipo double, e che successivamente calcoli e stampi il numero di elementi di A minori di 0"
anche se nella traccia non è esplicitamente richiesto ho messo che la dimensione k va inserita da tastiera e i singoli elementi dell'array devono essere dati da tastiera dall'utente.
cercando l'errore ho dedotto che l'errore è nell'inserimento degli elementi perchè, provando a creare il vettore dando gli elementi direttamente nel codice, viene compilato correttamente e anche l'output è corretto.
import java.io.*;
public class arrayNminori0 {
public static void main(String[] args) throws IOException{
int i;
int cont=0;
int k=0;
double []A= new double[k];
//inserimento della dimensione da tastiera
InputStreamReader In= new InputStreamReader(System.in);
BufferedReader Tastiera= new BufferedReader (In);
System.out.print("immettere dimensione: ");
k=Integer.parseInt(Tastiera.readLine());
//ciclo per inserire gli elementi
for(i=0; i
System.out.print("valore di A: ");
A=Integer.parseInt(Tastiera.readLine());
}
//stampa
for(i=0; i
System.out.println(A);
}
//ciclo che li scorre e conta quelli minori di 0
for(i=0; i
if(A<0)
cont++;
}
//stampa numero di elementi minori di 0
System.out.print(cont);
}
}
grazie mille!

Risposte
Ciao,
premetto che non sono esperto di java (nemmeno un po'...).
Ma ho notato questa cosa: tu crei il vettore
A quel punto k vale ancora il valore iniziale (che nel caso specifico e' 0).
Poi cambi il valore di k. Come fa a sapere il vettore che gli e' cambiata la taglia?
Ripeto che di java non ne so molto, ma se fosse C questo sarebbe un baco, e sospetto che lo sia anche in java.
[BTW In C ci sarebbe da riallocare con realloc() (oppure da allocare dopo avere chiesto all'utente il valore di k), magari in java c'e' un meccanismo simile.]
bye^2, mr
premetto che non sono esperto di java (nemmeno un po'...).
Ma ho notato questa cosa: tu crei il vettore
double []A= new double[k];
A quel punto k vale ancora il valore iniziale (che nel caso specifico e' 0).
Poi cambi il valore di k. Come fa a sapere il vettore che gli e' cambiata la taglia?
Ripeto che di java non ne so molto, ma se fosse C questo sarebbe un baco, e sospetto che lo sia anche in java.
[BTW In C ci sarebbe da riallocare con realloc() (oppure da allocare dopo avere chiesto all'utente il valore di k), magari in java c'e' un meccanismo simile.]
bye^2, mr
Non c'è alcun bisogno di un meccanismo simile a realloc in questo caso. È possibile definire infatti una variabile in qualsiasi punto del codice (prima del suo uso). In questo caso la soluzione più semplice sarebbe quella di creare l'array con new dopo aver letto la dimensione e prima di inizializzarlo con i valori. Cioè:
Anche le altre variabili locali si possono definire più avanti nel codice, ma per A è necessario inizializzarla dopo l'immissione della dimensione da tastiera. È comunque strano che il programma non abbia lanciato un eccezioni OutOfBoundsException all'inserimento dei valori nell'array.
//inserimento della dimensione da tastiera InputStreamReader In = new InputStreamReader(System.in); BufferedReader Tastiera = new BufferedReader (In); System.out.print("immettere dimensione: "); int k = Integer.parseInt(Tastiera.readLine()); double[] A = new double[k];
Anche le altre variabili locali si possono definire più avanti nel codice, ma per A è necessario inizializzarla dopo l'immissione della dimensione da tastiera. È comunque strano che il programma non abbia lanciato un eccezioni OutOfBoundsException all'inserimento dei valori nell'array.
grazie mille! il problema era proprio quello
