/** * ExaminationOOP * Classe per illustrare la progettazione orientata agli oggetti * * @author A.Luchetta * @version 7-Nov-2007 * @see Student.java * @see Examination.java */ import java.util.Scanner; import java.util.Locale; import java.util.NoSuchElementException; public class ExaminationOOP { public static void main(String[] args) { Student[] students = new Student[10]; int studentsSize = 0; Scanner in = new Scanner(System.in); boolean done = false; while (!done) { Student s = readStudent(in); if (s == null) done = true; else { if (studentsSize >= students.length) students = resize(students, 2 * studentsSize); students[studentsSize] = s; studentsSize++; } } done = false; while (!done) { System.out.print("Comando? "); int command = in.nextInt(); if (command == 0) done = true; else if (command == 1) { System.out.print("nome? "); String name = in.next(); printAverage(students, name, studentsSize); } else System.out.println("Comando errato"); } } /* Acquisisce uno studente da flusso di dati ritorna null se il flusso di dati e’ terminato */ private static Student readStudent(Scanner input) { final String END_OF_DATA = ""; String line = END_OF_DATA; if (input.hasNextLine()) line = input.nextLine(); if (line.equalsIgnoreCase(END_OF_DATA)) return null; Scanner st = new Scanner(line); st.useLocale(Locale.US); String nameTmp = st.next(); double wMarkTmp = st.nextDouble(); double oMarkTmp = st.nextDouble(); return new Student(nameTmp, wMarkTmp, oMarkTmp); } /* Stampa la media di uno studente @param students l’array di studenti @param name nome dello studente @param size numero degli studenti */ private static void printAverage(Student[] students, String name, int size) { int i = findName(students, name, size); //gestione dell'errore con lancio di eccezione if (i == -1) throw new NoSuchElementException("studente non trovato"); double avg = (students[i].getWMark() + students[i].getOMark()) / 2; System.out.println(name + " " + avg + "\n"); } /* Trova l’indice dell’array corrispondente a uno studente @param students l’array di studenti @param name nome dello studente @param count numero degli studenti @return l’indice se lo studente e’ presente, -1 altrimenti */ private static int findName(Student[] students, String name, int size) { for (int i = 0; i < size; i++) if (students[i].getName().equals(name)) return i; return -1; } /* il solito metodo resize()… */ private static Student[] resize(Student[] oldArray, int newLength) { int n = oldArray.length < newLength ? oldArray.length : newLength; Student[] newArray = new Student[n]; for (int i = 0; i < n; i++) newArray[i] = oldArray[i]; return newArray; } } // fine della classe ExaminationtOOP