PDA

Visualizza la versione completa : [java] ricerca min


BlueJ
07-01-2005, 17:37
Nella ricerca del numero minimo in un array.....

supponiamo che il num max di elementi di un array sia 5,e attualmente sono contenuti solo 3 elementi.
Ecco il mio array

5,2,3,_,_

ora vorrei calcolare il min di questi elementi..quindi:

(cito da parte del mio codice)

for (int i=0; i<MaxArray; i++){
if (number[i] <= number[indexOfMin]) {
indexOfMin = i;
nMin = number[indexOfMin];
}
}
jLabelMin.setText("Il min " + nMin + " di posizione " + indexOfMin);
}

..il problema che l'array non essendo completo mi da ovviamente come numero minimo quello alla posizione nuemro 4 e mi indica tale numero come 0.Come posso fare?
Ulteriore domanda:se in un array non inserisco tutti i numeri sino al num max di elementi contenuti,il resto degli elementi mancanti 0 per default?

grazie :ciauz:

perzem
07-01-2005, 17:51
prova cos


for (int i=0; i<MaxArray; i++){
if (number[i] <= number[indexOfMin])&&(number[i]!=null)) {
indexOfMin = i;
nMin = number[indexOfMin];

BlueJ
08-01-2005, 09:42
Ciao,
nel codice posto da te mi da un errore di compilazione!! :ciauz:

Andrea1979
08-01-2005, 10:53
manca una parentesi tonda aperta.
if ((

BlueJ
08-01-2005, 11:57
Non la parentesi...mi da il seguente errore:

operator != cannot be applied to int,<nulltype>

Vi poso il code:

....................

public void jMin_actionPerformed(ActionEvent e) {

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

if ((number[i] <= number[indexOfMin])&&(number[i]!=null)) { //trovato elemento pi piccolo
indexOfMin = i;
nMin = number[indexOfMin];
}
}

jLabelMin.setText("Il min " + nMin + " di posizione " + indexOfMin);
}


.............................

:ciauz:

perzem
08-01-2005, 12:21
non puoi usare != per gli int prova con questo <>

FreeManX
08-01-2005, 12:35
in java esiste il metodo lenght applicato agli array ti la la lunghezza occupata non la dimensione max, se non ricordo male!

percui cosi dovrebbe funzionare


public void jMin_actionPerformed(ActionEvent e) {

//supponendo il nome dello array seqNum
int curr = seqNum[0];
int index=0;
for (int i=1; i<= seqNum.length()-1; i++){
if (seqNum[i] <= curr) {
curr = seqNum[i];
index=i;
}
}

jLabelMin.setText("Il min " + curr + " di posizione " + index);
}


bye

Andrea1979
08-01-2005, 13:00
BlueJ, c' da rivedere un po' la struttura del programma: da quel che ho capito, stai implementando uno Stack di interi di dimensione massima fissata, giusto?

Conviene allora, piuttosto che fare affidamento sulla lunghezza del supposto vettore di interi, definire una variabile "testa" tipo int che tenga traccia di quelle che sono state le operazioni sullo stack.

testa = -1 --> stack vuoto, non possibile eliminare elementi
testa = lunghezzavettore - 1 --> stack pieno, non possibile aggiungere altri elementi

ogni volta che aggiungi un elemento al tuo stack, incrementi testa, viceversa, ogni volta che elimini un elemento decrementi testa.

I cicli for andranno di conseguenza fino a testa (con l'unica eccezione che lo stack sia vuoto, per cui non avrebbe senso trovare massimi, minimi e medie dei valori).

Saluti.

BlueJ
09-01-2005, 11:21
Andrea io sto cercando di trovare il min di una serie di interi inseriti in un array di (es) lunghezza max 10 contenente 7 elementi...

:ciauz:

Andrea1979
09-01-2005, 11:49
public class arrayOperation {

private int[] array;

public arrayOperation(int a[]) {
array = a;
}

public int findMin() {
int min = array[0];
for (int i=1; i < array.length; i++) {
min = Math.min(min, array[i]);
}
return min;
}

public int findMinIndex() {
int min = findMin();
int minindex=0;
while (array[minindex] != min) {
minindex++;
}
return minindex;
}
}

Loading