[java] metodi e array

m3c4
Salve a tutti!!

ho un esercizio che mi manda in palla...

definire una classe arrayUtil che riceva un array di interi in input da tastiera
poi l'esercizio continua ma gia è facile... mi manda in palla questa prima parte...
gli definisco la classe, i costruttori, ecc ecc ma il programma non parte..

come l'avreste fatto voi??
se mi postate il codice è meglio, cosi confronto con il mio, correggo gli errori e prendo appunti!! =) grazie!

Risposte
dzcosimo
suppongo che la dimensione dell'array debba essere passata alcostruttore, se così non è dimmelo che cambio il codice

public Class arrayUtil{
private int[] array;
public arrayUtil(int n){
try{
array= new int[n];
Scanner tastiera=new Scanner(System.in);
int count;
while(count array[count]=tastiera.nextint()
cout++;
}
}
catch(Exception e){}
finally{
tastiera.close
}
}
}

prova a farlo girare prima di confrontare perchè l'ho scritto così di getto e magari è pieno di errori XD

m3c4
wow!! beh io pensavo a qualcosa di più semplice!!!! =)

grazie mille ora rifletto su questo codice e vedo di tirarne fuori qualcosa di utile (che sicuramente c'è!!)

comunque ho provato a farne uno ma è un metodo... che poi non riesco a inserire dentro alla classe...!

int [] util= new int [3];
				
	for (int i=0; i<util.length; i++)
	{
	util [i]=Input.getInt("inserisci valore elemento array "+(i+1));
	System.out.println("elemento "+(i+1)+" = "+util[i]);
	}
System.out.println("lunghezza array = "+util.length);


cioè io poi come dovrei definire la classe?
[/code]

apatriarca
Non vedo alcun motivo per cui quel codice non possa essere inserito all'interno del costruttore di una classe o un suo metodo. La tua classe arrayUtil deve semplicemente contenere un array (come campo privato) e avere quel codice nel costruttore o in un metodo che richiami.

dzcosimo
guarda m3c4 che io non ho fatto niente di diverso da quello che hai fatto te, semplicemente ho messo il codice dentro un costruttore, il cosotruttore dentro una classe e ho gestito(si fa per dire) le eccezioni

giozh
la dimensione dell'array gliela passi da tastiera oppure devi inserire i valori e creare un array in base a quanti valori inserisci?

m3c4
"apatriarca":
Non vedo alcun motivo per cui quel codice non possa essere inserito all'interno del costruttore di una classe o un suo metodo. La tua classe arrayUtil deve semplicemente contenere un array (come campo privato) e avere quel codice nel costruttore o in un metodo che richiami.


si capisco... a parole!!! è nel codice che sbaglio qualcosa!!!
@cosimo: come sopra!
@giozh: è indifferente!

apatriarca
Ci mostreresti il codice che hai provato a scrivere?

m3c4
comunque ho completato l'esercizio. il testo era:
Lo studente deve definire una classe ArrayUtil che riceva un array di interi in input da tastiera,
lo stampi su schermo, dia l’elemento massimo e il minimo e controlli se l’array dato in ingresso è ordinato. All’interno della classe definire un metodo main che testi i metodi suddetti.

io l'ho fatto cosi:
int [] util= new int [3];	
	for (int i=0; i<util.length; i++)
	{
	util [i]=Input.getInt("inserisci valore elemento array "+(i+1));
	System.out.println((i+1)+"° elemento array: "+util[i]);  //stampa come funzione
	}


void stampaArray( int[] util) //stampa come metodo
{
 System.out.println("Array: ");
 for (int i=0; i<util.length; i++)
  {
   System.out.println(util[i]);
  }
 System.out.println( );
}


void massimoValore(int util [])
{
int max;
if ((util[0]>util[1]) && (util[0]>util[2]))
 {
  max=util[0];
  System.out.println("massimo valore dell'array è "+max);
 }
else
 {
  if ((util[1]>util[0]) && (util[1]>util[2]))
   {
   max=util[1];
   System.out.println("massimo valore dell'array è "+max);
   }
  else
   {
   max=util[2];
   System.out.println("massimo valore dell'array è "+max);
   }
 }
}


void minimoValore(int util [])
{
int min;
if ((util[0]<util[1]) && (util[0]<util[2]))
 {
  min=util[0];
  System.out.println("minimo valore dell'array è "+min);
 }
else
 {
  if ((util[1]<util[0]) && (util[1]<util[2]))
   {
   min=util[1];
   System.out.println("minimo valore dell'array è "+min);
   }
  else
   {
   min=util[2];
   System.out.println("minimo valore dell'array è "+min);
   }
 }
}

void ordineArray(int util[])
{

if ((util[0]<util[1]) && (util[0]<util[2]) && (util[1]<util[2]))
 {
    System.out.println("l'array è ordinata");
 }
else
 {
 System.out.println("l'array non è ordinata");
 }
}

System.out.println( );
stampaArray(util);
massimoValore(util);
minimoValore (util);
ordineArray(util);


su javaMM va perfettamente, soddisfa le richieste dell'esercizio..
Peccato che non so come mettere la classe e definire un metodo main!!! capite dove sta la mia lacuna?? fra l'altro il mio libro non è di grande aiuto...

giozh
ma quindi l'array è solo di 3 elementi? visto che lo inizializzi come new int[3]... scrivi troppe righe per cercare l'elemento massimo/minimo, e vedere se è ordinato. ora te la sei cavata con poco perche c'hai solo tre elementi, ma se ne avessi avuti 1000? una if per ogni caso non mi sembra molto produttiva :D potresti fare così, usando i for:
verifica ordinamento : usa una variabile booleana che diventa falsa se l'array non è ordinato
boolean isSorted =true;
for(int i=0; i<util.length-1; i++) 
   if(util[i]>=util[i+1]
      isSorted=false;


quindi sfrutta questa variabile booleana appena trovata per cercare massimo e minimo. fai prima un controllo se questa variabile è true (quindi array ordinato), e se lo è restituisci come valore minimo il primo elemento, e come massimo l'ultimo, altrimenti te li cerchi:
int min=util[0];
int max=util[0];
for(int i=1;i<util.length; i++)
   if(util[i]>max)
      max=util[i];
   if(util<min)
      min=util[i];

così ora hai i valori che cerchi nelle variabili, il codice è piu pulito, e ti puoi cimentare con le stampe !

m3c4
"giozh":
ma quindi l'array è solo di 3 elementi? visto che lo inizializzi come new int[3]... scrivi troppe righe per cercare l'elemento massimo/minimo, e vedere se è ordinato. ora te la sei cavata con poco perche c'hai solo tre elementi, ma se ne avessi avuti 1000? una if per ogni caso non mi sembra molto produttiva :D potresti fare così, usando i for:
verifica ordinamento : usa una variabile booleana che diventa falsa se l'array non è ordinato
boolean isSorted =true;
for(int i=0; i<util.length-1; i++) 
   if(util[i]>=util[i+1]
      isSorted=false;


quindi sfrutta questa variabile booleana appena trovata per cercare massimo e minimo. fai prima un controllo se questa variabile è true (quindi array ordinato), e se lo è restituisci come valore minimo il primo elemento, e come massimo l'ultimo, altrimenti te li cerchi:
int min=util[0];
int max=util[0];
for(int i=1;i<util.length; i++)
   if(util[i]>max)
      max=util[i];
   if(util<min)
      min=util[i];

così ora hai i valori che cerchi nelle variabili, il codice è piu pulito, e ti puoi cimentare con le stampe !



guarda era un altro dei problemi che mi stavo mettendo... infatti se io gli do come input una n che sarà la lunghezza della variabile, se n è diversa da 3 valoreMassimo e valoreMInimo se ne vanno a farsi benedire!! grazieee!!


però alla fine il problema principale rimane quello della classe....

giozh
per la classe è semplice, ti dice di definire una classe arrayutil no? ti fai un file ArrayUtil.java e ci metti dentro questo codice. il costruttore sai almeno come si definisce? il metodo main te lo puoi fare direttamente dentro la clase ArrayUtil... ma almeno sai cos'è il main??? se posti tutto l'esercizio magari ti posso dare una mano in più, così è un pò difficile, è troppo vago...

m3c4
"giozh":
per la classe è semplice, ti dice di definire una classe arrayutil no? ti fai un file ArrayUtil.java e ci metti dentro questo codice. il costruttore sai almeno come si definisce? il metodo main te lo puoi fare direttamente dentro la clase ArrayUtil... ma almeno sai cos'è il main??? se posti tutto l'esercizio magari ti posso dare una mano in più, così è un pò difficile, è troppo vago...


si si!! lo so fare!!! pero mi da cmq errore! il testo dell'esercizio l'ho postato completo! guarda sopra!

m3c4
comunque giozh non ci avevo proprio pensato al ciclo for! che tonto!!

giozh
allora definisci per ogni compito che deve fare questo algoritmo un metodo (uno per il massimo, uno per il minimo etc etc), e poi richiama questi metodi dal main. semplice, o ancora non hai capito come fare?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.