PDA

View Full Version : Esercizio esame!!! HELP ME! array!


fedez_
14-01-2015, 20:02
TESTO DELL'ESERCIZIO
Scrivere un programma, composto da due classi, una denominata Programma contenente il main, l’altra i metodi necessari allo svolgimento delle operazioni, denominata Metodi, che svolga quanto segue:

Classe Programma:
Riceve un numero positivo n, istanziando un array di interi denominato interi di dimensione n;
Riceve in ingresso due interi a e b, tali che a < b;
Invoca il metodo occorrenzeContenuto() (decritto sotto) passando come parametri interi, a e b;
Stampa l’array originale e quello modificato;
Qualora il contenuto dei due array sia diverso, invoca il metodo uniformaContenuto() (descritto sotto) passando come parametri i due array;
Stampa a video il risultato del metodo uniformaContenuto();


Classe Metodi:
Definisce un metodo occorrenzeContenuto() che riceve come parametri un array di interi denominato par e due interi a e b e conta quanti elementi di par non sono compresi strettamente fra a e b. Se tale valore è maggiore di (lunghezza di par)/3, sostituisce i valori di par non compresi fra a e b con il risultato del metodo calcolaMedia(); lascia l’array inalterato altrimenti;
Definisce un metodo calcolaMedia() che riceve come parametri un array di interi denominato par e due interi a e b e restituisce la media dei valori di par non compresi fra a e b;
Definisce un metodo uniformaContenuto() che riceve come parametri due array di interi denominati par1 e par2, creando un terzo array denominato rit i cui valori in posizione i sono pari alla differenza dei valori di par1 e par2 in posizione i; ad esempio, dati gli array {6, 7, 8, 9, 10} e {1, 2, 3, 4, 5} il risultato sarebbe un terzo array {5, 5, 5, 5, 5};



import java.util.Scanner;

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

Scanner tastiera = new Scanner (System.in);
System.out.println("Inserisci la dimensione dell'array");
int d = tastiera.nextInt();
int i;
int interi [] = new int [d];
System.out.println("Riempi l'array di elementi");
for (i=0; i<interi.length; i++)
interi[i]= tastiera.nextInt();
int a, b;
do {
System.out.println("Inserisci il valore di a");
a = tastiera.nextInt();
System.out.println("Inserisci il valore di b");
b = tastiera.nextInt();

if (a>b)
System.out.println("Riprova, a deve essere minore di b");
} while (a>b);

int [] interiOriginale = new int [d];
for (i=0; i<interi.length; i++)
interiOriginale[i] = interi[i];

int par [] = occorrenzeContenuto(interi, a, b);

System.out.println("Array interiOriginale");
for (i=0; i<interiOriginale.length; i++)
System.out.print(interiOriginale[i] + " ");
System.out.println();

System.out.println("Array par");
for (i=0; i<par.length; i++)
System.out.print(par[i] + " ");
System.out.println();

boolean flag = true;
for (i=0; i<interiOriginale.length && flag; i++) {
if (interiOriginale[i] != par[i])
flag = false;
}



if (!(flag)) {
int [] rit = uniformaContenuto(interiOriginale, par);
System.out.println("Array rit");
for (i=0; i<rit.length; i++)
System.out.print(rit[i] + " ");
}


}

public static int [] occorrenzeContenuto (int [] par, int a, int b) {
int i;
int contatore =0;
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b))
contatore++;

}

if (contatore > (par.length/2)) {
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b)) {
par [i] = calcolaMedia (par, a, b);
}
}
}
return par;
}

public static int calcolaMedia (int [] par, int a, int b) {
int i;
int somma = 0;
int contatore = 0;
for (i=0; i<par.length; i++) {
if ((par[i]<a) || (par[i]>b)) {
somma = somma + par [i];
contatore++;
}
}
System.out.println("Somma prima divisione: "+somma);
somma = somma / contatore;
System.out.println("Somma finale: "+somma);
return somma;

}

public static int [] uniformaContenuto (int [] par1, int [] par2) {
int i;
int [] rit = new int [par1.length];
for (i=0; i<par1.length; i++)
rit[i] = par1[i] - par2 [i];
return rit;

}
}


Il problema è semplice: ogni elemento dell'array da modificare riceve inspiegabilmente, una media diversa... ? chi sa aiutarmi?! esame in vista :S

sottovento
15-01-2015, 04:47
Il testo di chiede esplicitamente di scrivere due classi, e ti impone anche il nome delle classi: Programma e Metodi. Sarebbe meglio scrivere due classi in conformita' col testo, cosa ne pensi? Secondo me migliorerebbe le possibilita' di superare l'esame.

La calcolaMedia() che hai scritto sembra ok. La media probabilmente ti sembra strana perche' e' calcolata sugli interi, non sui numeri reali. Ovviamente hai implicitamente supposto che valga la condizione a < b; se questa condizione non e' verificata all'ingresso della calcolaMedia(), non otterrai il risultato corretto