TESTO DELL'ESERCIZIO
codice: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};
codice: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

Rispondi quotando