Sei sulla pagina 1di 13

CAPITOLO 7 ARRAY /** Legge I valori di 7 temperature inserite dallutente e mostra quail di Queste sono al di sopra e al di sotto della

meda delle temperature stesse. */ import java.util.Scanner; public class ArrayDiTemperature { public static void main(String[] args) { double[] temperatura = new double[7]; // Lettura delle temperature e calcolo della loro media: Scanner tastiera = new Scanner(System.in); System.out.println("Inserire 7 temperature:"); double somma = 0; for (int indice = 0; indice < 7; indice++) { temperatura[indice] = tastiera.nextDouble(); somma = somma + temperatura[indice]; } double media = somma / 7; System.out.println("La temperatura media e " + media); // Mostra ogni temperatura e la relazione rispetto alla temperatura media: System.out.println("Le 7 temperature sono"); for (int indice = 0; indice < 7; indice++) { if (temperatura[indice] < media) System.out.println(temperatura[indice] + " sotto la media"); else if (temperatura[indice] > media) System.out.println(temperatura[indice] + " sopra la media"); else //temperatura[indice] == media System.out.println(temperatura[indice] + " pari alla media"); } System.out.println("Buona settimana."); } } /** Legge I valori di 7 temperature inserite dallutente e mostra quail di Queste sono al di sopra e al di sotto della meda delle temperature stesse. */ import java.util.Scanner; public class ArrayDiTemperature2 { public static void main(String[] args) { Scanner tastiera = new Scanner(System.in); System.out.println("Quante temperature si devono inserire?"); int dimensione = tastiera.nextInt( ); double[] temperatura = new double[dimensione]; // Lettura delle temperature e calcolo della loro media: System.out.println("Inserire " + temperatura.length + " temperature:"); double somma = 0;

for (int indice = 0; indice < temperatura.length; indice++) { temperatura[indice] = tastiera.nextDouble(); somma = somma + temperatura[indice]; } double media = somma / temperatura.length; System.out.println("La temperatura media e " + media); // Mostra ogni temperatura e la relazione rispetto alla temperatura media: System.out.println("Le " + temperatura.length + " temperature sono" ); for (int indice = 0; indice < temperatura.length; indice++) { if (temperatura[indice] < media) System.out.println(temperatura[indice] + " sotto la media"); else if (temperatura[indice] > media) System.out.println(temperatura[indice] + " sopra la media"); else //temperatura[indice] == media System.out.println(temperatura[indice] + " pari alla media"); } System.out.println("Buona settimana."); } } import java.util.Scanner; /** Classe che rappresenta un venditore. */ public class Venditore { private String nome; private double vendite; public Venditore() { nome = "Nessun nome"; vendite = 0; } public Venditore (String nomeIniziale, double venditeIniziali) { setValori(nomeIniziale, venditeIniziali); } public void setValori(String nuovoNome, double nuoveVendite) { nome = nuovoNome; vendite = nuoveVendite; } public void leggiValoriDaTastiera() { System.out.print("Inserire il nome: "); Scanner tastiera = new Scanner(System.in); nome = tastiera.nextLine(); System.out.print("Inserire le vendite: "); vendite = tastiera.nextDouble(); } public void scriviOutput() { System.out.println("Nome: " + nome); System.out.println("Vendite: " + vendite); } public String getNome() { return nome; }

public double getVendite() { return vendite; } } import java.util.Scanner; /** Programma per la produzione del report delle vendite. */ public class ReportVendite { private double venditaPiuAlta; private double mediaVendite; private Venditore[] team; //Loggetto array e creato in recuperaDati. private int numeroDiVenditori; //Equivalente a team.length /** Lettura del numero di venditori e dei relativi dati. */ public void recuperaDati() { Scanner tastiera = new Scanner(System.in); System.out.println("Inserire il numero di venditori:"); numeroDiVenditori = tastiera.nextInt(); team = new Venditore[numeroDiVenditori + 1]; for (int i = 1; i <= numeroDiVenditori; i++) { team[i] = new Venditore(); System.out.println("Inserire i dati per il venditore " + i); team[i].leggiValoriDaTastiera(); System.out.println(); } } /** Calcolo della vendita piu alta e della vendita media. Precondizione: deve esistere almeno un venditore associato. */ public void calcolaStatistiche() { double venditaSuccessiva = team[1].getVendite(); venditaPiuAlta = venditaSuccessiva; double somma = venditaSuccessiva; for (int i = 2; i <= numeroDiVenditori; i++) { venditaSuccessiva = team[i].getVendite(); somma = somma + venditaSuccessiva; if (venditaSuccessiva > venditaPiuAlta) venditaPiuAlta = venditaSuccessiva; //vendita piu alta fino ad ora } mediaVendite = somma / numeroDiVenditori; } /** Visualizza il report su schermo. */ public void visualizzaRisultati() { System.out.println("La vendita media per venditore e " + mediaVendite); System.out.println("La vendita piu alta e pari a " + venditaPiuAlta); System.out.println(); System.out.println("Il seguente venditore ha le vendite maggiori:"); for (int i = 1; i <= numeroDiVenditori; i++) { double venditaSuccessiva = team[i].getVendite();

if (venditaSuccessiva == venditaPiuAlta) { team[i].scriviOutput(); System.out.println("" + (venditaSuccessiva - mediaVendite) + " sopra la media."); System.out.println(); } } System.out.println("Le performance dei restanti sono le seguenti:"); for (int i = 1; i <= numeroDiVenditori; i++) { double venditaSuccessiva = team[i].getVendite(); if (team[i].getVendite() != venditaPiuAlta) { team[i].scriviOutput(); if (venditaSuccessiva >= mediaVendite) System.out.println(" " + (venditaSuccessiva - mediaVendite) + " sopra la media."); else System.out.println(" " + (mediaVendite - venditaSuccessiva) + " sotto la media."); System.out.println(); } } } public static void main(String[] args) { // 1) Preparazione ReportVendite report = new ReportVendite(); // 2) Recupero dei dati report.recuperaDati(); // 3) Calcolo di alcune statistiche report.calcolaStatistiche(); // 4) Visualizzazione dei risultati report.visualizzaRisultati(); } } import java.util.Scanner; /** Utilizzo di variabili indicizzte. */ public class ArgomentiDemo { public static void main(String[] args) { Scanner tastiera = new Scanner(System.in); System.out.println("Inserire il voto dellesame 1:"); int punteggioIniziale = tastiera.nextInt(); int[] punteggioSeguente = new int[3]; for (int i = 0; i < punteggioSeguente.length; i++) punteggioSeguente[i] = punteggioIniziale + 5 * i; for (int i = 0; i < punteggioSeguente.length; i++) { double possibileMedia = getMedia(punteggioIniziale, punteggioSeguente[i]); System.out.println("Se il voto allesame 2 sara " + punteggioSeguente[i]); System.out.println("la media sara uguale a " + possibileMedia); } } public static double getMedia(int n1, int n2) { return (n1 + n2) / 2.0; } }

/** Esempio di programma che verifica se due array sono uguali. */ public class TestUguaglianzaArray { public static void main(String[] args) { int[] a = new int[3]; int[] b = new int[3]; setArray(a); setArray(b); if (b == a) System.out.println("Uguali secondo loperatore ==."); else System.out.println("Diversi secondo loperatore ==."); if (equals(b, a)) System.out.println("Uguali secondo il metodo equals."); else System.out.println("Diversi secondo il metodo equals."); } public static boolean equals(int[] a, int[] b) { boolean elementiUguali = true;//si ipotizza che gli array siano uguali if (a.length != b.length) elementiUguali = false; else { int i = 0; while (elementiUguali && (i < a.length)) { if (a[i] != b[i]) elementiUguali = false; i++; } } return elementiUguali; } public static void setArray(int[] array) { for (int i = 0; i < array.length; i++) array[i] = i; } } import java.util.Scanner; /** Esempio di metodo che ritorna un array. */ public class RitornoDiArrayDemo { public static void main(String[] args) { Scanner tastiera = new Scanner(System.in); System.out.println("Inserire il voto dellesame 1:"); int punteggioIniziale = tastiera.nextInt(); int[] punteggioSeguente = new int[3]; for (int i = 0; i < punteggioSeguente.length; i++) punteggioSeguente[i] = punteggioIniziale + 5 * i; double[] punteggioMedio = ottieniArrayDiMedie(punteggioIniziale, punteggioSeguente); for (int i = 0; i < punteggioSeguente.length; i++) {

System.out.println("Se il voto allesame 2 sara " + punteggioSeguente[i]); System.out.println("la media sara uguale a " + punteggioMedio[i]); } } public static double[] ottieniArrayDiMedie(int punteggioIniziale, int[] punteggioSeguente) { double[] temp = new double[punteggioSeguente.length]; for (int i = 0; i < temp.length; i++) temp[i] = getMedia(punteggioIniziale, punteggioSeguente[i]); return temp; } public static double getMedia(int n1, int n2) { return (n1 + n2) / 2.0; } } import java.util.Scanner; public class ListaDemo { public static final int DIMENSIONE_MAX = 3; //Assumendo > 0 public static void main(String[] args) { ListaSenzaRipetizioni listaDiCoseDaFare = new ListaSenzaRipetizioni(DIMENSIONE_MAX); System.out.println("Inserire gli elementi per la lista quando richiesto."); boolean altriElementi = true; String successivo = null; Scanner tastiera = new Scanner(System.in); while (altriElementi && !listaDiCoseDaFare.piena()) { System.out.println("Inserire un elemento:"); successivo = tastiera.nextLine(); listaDiCoseDaFare.aggiungiElemento(successivo); if (listaDiCoseDaFare.piena()) { System.out.println("La lista e' piena."); } else { System.out.print("Altri elementi per la lista? "); String risposta = tastiera.nextLine(); if (risposta.trim().equalsIgnoreCase("no")) altriElementi = false; //Utente indica //nessun altro elemento } } System.out.println("La lista contiene:"); int posizione = listaDiCoseDaFare.POSIZIONE_INIZIALE; successivo = listaDiCoseDaFare.getElementoIn(posizione); while (successivo != null) { //null indica la fine della lista System.out.println(successivo); posizione++; successivo = listaDiCoseDaFare.getElementoIn(posizione); } } } /** Un oggetto di questa classe e' un caso speciale di lista di stringhe. E' possibile creare la lista solo dall'inizio alla fine. E' possibile aggiungere

elementi solo alla fine della lista. Non e' possibile cambiare singoli elementi, ma e' possible cancellare l'intera lista e ricominciare. Nussun elemento dovrebbe comparire piu' di una volta nella lista. E' possibile utilizzare delle variabili interi come indicatori della posizione nella lista. Gli indicatori della posizione sono simili agli indici dell'array, ma sono numerati partendo da 1. */ public class ListaSenzaRipetizioni { public static int POSIZIONE_INIZIALE = 1; public static int DIMENSIONE_DEFAULT = 50; //elemento.length e' il numero totale di elementi inseribili nella lista (la //sua capacita'); //numeroElementi e' il numero di elementi attualmente nella lista private int numeroElementi; //puo essere minore di elemento.length. private String[] elemento; /** Crea una lista vuota di una data capacita'. */ public ListaSenzaRipetizioni(int massimoNumeroDiElementi) { elemento = new String[massimoNumeroDiElementi]; numeroElementi = 0; } /** Crea una lista vuota con capacita' DIMENSIONE_DEFAULT. */ public ListaSenzaRipetizioni() { elemento = new String[DIMENSIONE_DEFAULT]; numeroElementi = 0; // e' possibile sostituire questi due elementi con // this(DIMENSIONE_DEFAULT); } public boolean piena() { return numeroElementi == elemento.length; } public boolean vuota() { return numeroElementi == 0; } /** Precondizione: la lista non e' piena Postcondizione: se un elemento non e' nella lista deve essere aggiunto alla lista */ public void aggiungiElemento(String nuovoElemento) { if (!nellaLista(nuovoElemento)) { if (numeroElementi == elemento.length) { System.out.println("La lista e' piena!"); System.exit(0); } else { elemento[numeroElementi] = nuovoElemento; numeroElementi++; } } //altrimenti non fare nulla. L'elemento e' gia' nella lista. } /** Se l'argomento indica una posizione nella lista, viene restituito l'elemento in quella specifica posizione;

altriementi viene restituito null. */ public String getElementoIn(int posizione) { String risultato = null; if ((1 <= posizione) && (posizione <= numeroElementi)) risultato = elemento[posizione - 1]; return risultato; } /** Restituisce true se la posizione passata come argomento indica l'ultima posizione nella lista; altrimenti restituisce false. */ public boolean ultimoElemento(int posizione) { return posizione == numeroElementi; } /** Restituisce true se l'elemento e' nella lista; altrimenti restituisce false. Non distingue tra lettere maiuscole e minuscole. */ public boolean nellaLista(String elementoDaRicercare) { boolean trovato = false; int i = 0; while (!trovato && (i < numeroElementi)) { if (elementoDaRicercare.equalsIgnoreCase(elemento[i])) trovato = true; else i++; } return trovato; } public int getMassimoNumeroDiElementi() { return elemento.length; } public int getNumeroDiElementi() { return numeroElementi; } public void cancellaLista() { numeroElementi = 0; } } /** Classe per ordinare un array di tipo int dal piu' piccolo al piu' grande. */ public class OrdinaArray { /** Precondizione: Ogni elemento nell'array ha un valore. Azione: Ordina l'array in ordine crescente. */ public static void selectionSort(int[] unArray) { for (int indice = 0; indice < unArray.length - 1; indice++) { // Posiziona il valore corretto in unArray[indice] int indiceDelSuccessivoPiuPiccolo = getIndiceDelPiuPiccolo(indice, unArray);

scambio(indice, indiceDelSuccessivoPiuPiccolo, unArray); //Asserzione: unArray[0] <= unArray[1] <=...<= unArray[indice] //e questi sono I piu' piccoli dell'array originale di elementi. //Le posizioni rimanenti contengono i rimanenti elementi //dell'array. } } /** Ritorna l'indice del piu' piccolo valore nella porzione di array che inizia dall'elemento il cui indice e' indiceInizio e termina all'ultimo elemento. */ private static int getIndiceDelPiuPiccolo(int indiceInizio, int[] a) { int minimo = a[indiceInizio]; int indiceDelMinimo = indiceInizio; for (int indice = indiceInizio + 1; indice < a.length; indice++) { if (a[indice] < minimo) { minimo = a[indice]; indiceDelMinimo = indice; //minimo e' il piu' piccolo //da a[indiceInizio] fino a[indice] } } return indiceDelMinimo; } /** Precondizione: I e j sono indici validi per l'array a. Postcondizione: I valori di a[i] e a[j] sono stati scambiati. */ private static void scambio(int i, int j, int[] a) { int temp = a[i]; a[i] = a[j]; a[j] = temp; //valore originale di a[i] } } public class SelectionSortDemo { public static void main(String[] args) { int[] b = {7, 5, 11, 2, 16, 4, 18, 14, 12, 30}; visualizza(b, "prima dell'ordinamento"); OrdinaArray.selectionSort(b); visualizza(b, "dopo l'ordinamento"); } public static void visualizza(int[] array, String quando) { System.out.println("Valori dell'array " + quando + ":"); for (int i = 0; i < array.length; i++) System.out.print(array[i] + " "); System.out.println( ); } } /** Visualizza una tabella bi-dimensionale mostrando come i tassi di interesse influiscono sui bilanci delle banche. */ public class TabellaInteressi {

public static void main(String[] args) { int[][] tabella = new int[10][6]; for (int riga = 0; riga < 10; riga++) for (int colonna = 0; colonna < 6; colonna++) tabella[riga][colonna] = getBilancio(1000.00, riga + 1, (5 + 0.5 * colonna)); System.out.println("Bilanci per vari Tassi di Interesse Capitalizzazione annuale"); System.out.println("(Arrotondato a Valori Interi di Euro)"); System.out.println(); System.out.println("Anni 5.00% 5.50% 6.00% 6.50% 7.00% 7.50%"); for (int riga = 0; riga < 10; riga++) { System.out.print((riga + 1) + " ");

for (int colonna = 0; colonna < 6; colonna++) System.out.print("" + tabella[riga][colonna] + " "); System.out.println(); } } /** Restituisce il bilancio in conto dopo un dato numero di anni e il tasso di interesse con un bilancio iniziale di bilancioIniziale. Linteresse e calcolato annualmente. Il bilancio e arrotondato ad un numero intero. */ public static int getBilancio(double bilancioIniziale, int anni, double tasso) { double bilancioCorrente = bilancioIniziale; for (int conteggio = 1; conteggio <= anni; conteggio++) bilancioCorrente = bilancioCorrente * (1 + tasso / 100); return (int)(Math.round(bilancioCorrente)); } } /** Visualizza una tabella bi-dimensionale mostrando come i tassi di interesse influiscono sui bilanci delle banche. */ public class TabellaInteressi2 { public static final int RIGHE = 10; public static final int COLONNE = 6; public static void main(String[] args) { int[][] tabella = new int[RIGHE][COLONNE]; for (int riga = 0; riga < RIGHE; riga++) for (int colonna = 0; colonna < COLONNE; colonna++) tabella[riga][colonna] = getBilancio(1000.00, riga + 1, (5 + 0.5 * colonna)); System.out.println("Bilanci per vari Tassi di Interesse Capitalizzazione annuale "); System.out.println("(Arrotondato a Valori Interi di Euro)"); System.out.println(); System.out.println("Anni 5.00% 5.50% 6.00% 6.50% 7.00% 7.50%"); visualizzaTabella(tabella); } /**

Precondizione: Larray unArray ha RIGHE righe e COLONNE colonne. Postcondizione: Il contenuto dellarray e visualizzato con il segno della valuta. */ public static void visualizzaTabella(int[][] unArray) { for (int riga = 0; riga < RIGHE; riga++) { System.out.print((riga + 1) + " "); for (int colonna = 0; colonna < COLONNE; colonna++) System.out.print("" + unArray[riga][colonna] + " "); System.out.println(); } } /** Ritorna il bilancio in conto dopo un dato numero di anni e il tasso di interesse con un bilancio iniziale di bilancioIniziale. Linteresse e calcolato annualmente. Il bilancio e arrotondato ad un numero intero. */ public static int getBilancio(double bilancioIniziale, int anni, double tasso) { double bilancioCorrente = bilancioIniziale; for (int conteggio = 1; conteggio <= anni; conteggio++) bilancioCorrente = bilancioCorrente * (1 + tasso / 100); return (int)(Math.round(bilancioCorrente)); } } /** Classe che registra il tempo impiegato da ognuno dei dipendenti di unazienda durante una settimana di cinque giorni. Un esempio di applicazione e nel metodo main. */ public class LibroDelTempo { private int numeroDiDipendenti; private int[][] ore; //ore[i][j] contiene le ore //del dipendente j al giorno i. private int[] oreSettimana; //oreSettimana[i] contiene le ore settimanali //in cui ha lavorato il dipendente i+1. private int[] oreGiorno; //oreGiorno[i] contiene le ore totali in cui //hanno lavorato i dipendenti nel giorno i private static final int NUMERO_GIORNI_LAVORATIVI = 5; private static final int LUN = 0; private static final int MAR = 1; private static final int MER = 2; private static final int GIO = 3; private static final int VEN = 4; public LibroDelTempo(int ilNumeroDiDipendenti) { numeroDiDipendenti = ilNumeroDiDipendenti; ore = new int[NUMERO_GIORNI_LAVORATIVI][numeroDiDipendenti]; oreSettimana = new int[numeroDiDipendenti]; oreGiorno = new int[NUMERO_GIORNI_LAVORATIVI]; } public void setOre() { //Questo e un prototipo. ore[0][0] = 8; ore[0][1] = 0; ore[0][2] = 9; ore[1][0] = 8; ore[1][1] = 0; ore[1][2] = 9; ore[2][0] = 8; ore[2][1] = 8; ore[2][2] = 8; ore[3][0] = 8; ore[3][1] = 8; ore[3][2] = 4;

ore[4][0] = 8; ore[4][1] = 8; ore[4][2] = 8; } public void aggiorna() { calcolaOreSettimana(); calcolaOreGiorno(); } private void calcolaOreSettimana() { for (int numeroDipendente = 1; numeroDipendente <= numeroDiDipendenti; numeroDipendente ++) {//Elabora un dipendente: int somma = 0; for (int giorno = LUN; giorno <= VEN; giorno++) somma = somma + ore[giorno][numeroDipendente - 1]; //somma contiene la somma di tutte le ore lavorate in una //settimana dal dipendente con numero numeroDipendente. oreSettimana[numeroDipendente - 1] = somma; } } private void calcolaOreGiorno() { for (int giorno = LUN; giorno <= VEN; giorno++) { //Elabora un giorno (per tutti i dipendenti): int somma = 0; for (int numeroDipendente = 1; numeroDipendente <= numeroDiDipendenti; numeroDipendente++) somma = somma + ore[giorno][numeroDipendente - 1]; //somma contiene la somma di tutte le ore lavorate da //tutti i dipendenti in un giorno. oreGiorno[giorno] = somma; } } public void visualizzaTabella() { // intestazione System.out.print("Dipendente "); for (int numeroDipendente = 1; numeroDipendente <= numeroDiDipendenti; numeroDipendente++) System.out.print(numeroDipendente + " "); System.out.println("Totali"); System.out.println(); // valori riga for (int giorno = LUN; giorno <= VEN; giorno++) { System.out.print(getNomeGiorno(giorno) + " "); for (int colonna = 0; colonna < ore[giorno].length; colonna++) System.out.print(ore[giorno][colonna] + " "); System.out.println(oreGiorno[giorno]); } System.out.println(); System.out.print("Totale = "); for (int colonna = 0; colonna < numeroDiDipendenti; colonna++) System.out.print(oreSettimana[colonna] + " "); System.out.println(); } //Converte 0 in "Lunedi", 1 in "Martedi",ecc. //Gli spazi sono inseriti per avere tutte le stringhe della stessa lunghezza.

private String getNomeGiorno(int giorno) { String nomeGiorno = null; switch (giorno) { case LUN: nomeGiorno = "Lunedi "; break; case MAR: nomeGiorno = "Martedi "; break; case MER: nomeGiorno = "Mercoledi"; break; case GIO: nomeGiorno = "Giovedi "; break; case VEN: nomeGiorno = "Venerdi "; break; default: System.out.println("Errore Fatale."); System.exit(0); break; } return nomeGiorno; } /** Legge le ore lavorate da ogni dipendente in ogni giorno della settimana lavorativa nellarray bi-dimensionale delle ore. (Il metodo per linput e solo una bozza in questa versione preliminare.) Computa il totale delle ore settimanali per ogni dipendente e il totale delle ore giornaliere per tutti i dipendenti. */ public static void main(String[] args) { final int NUMERO_DI_DIPENDENTI = 3; LibroDelTempo libro = new LibroDelTempo(NUMERO_DI_DIPENDENTI); libro.setOre(); libro.aggiorna(); libro.visualizzaTabella(); } } public class ClasseEsempio { public static void incrementaArrayDi2(double unArray[]){ for (int i = 0; i < unArray.length; i++) unArray[i] = unArray[i] + 2; } //<Inserire qui il restante codice per la definizione della classe.> }

Potrebbero piacerti anche