Il numero di righe conta poco con l'ottimizzazione. Non c'è molto di efficienza in quei metodi, e comunque non si può far molto visto il tipo di esercizio...
Alcune variabili si possono evitare ed al posto del while, se proprio vuoi mettere il controllo, puoi usare il valore assoluto.
Comunque quel codice non è corretto, non rispetta il punto 3.
CITAZIONE
ricerchi l’articolo, o gli articoli, il cui prezzo si avvicina di più al prezzo medio.
Inoltre per memorizzare i prezzi si dovrebbero usare i double, non gli int.
@©ÃlÐö: il while come il tuo significa far continuare all'infinito la richiesta del prezzo.
Io per i prezzi farei così:
CODICE
for(int i=0; i<prezzi.length; i++) {
System.out.print("Inserisci prezzo "+i+": ");
int p = scanner.nextInt();
prezzi[i] = ((p & 0x80000000) >> 31 == -1) ? (~p+1) : p;
}
E' più figo, inoltre evita il ciclo (ma non l'if, ovviamente).
Comunque più leggo il punto 3 più lo trovo ambiguo. Come si stabilisce quando il valore che si avvicina abbastanza? Diverso è il caso se viene interpretato come "i prezzi (uguali) che si avvicinano di più al valore medio".
Il prezzo massimo lo calcolerei così comunque:
CODICE
for(int i=1; i<prezzi.length; i++) {
System.out.print("Inserisci prezzo "+i+": ");
prezzi[i] = scanner.nextDouble();
indice = (prezzi[i] > prezzi[i-1]) ? i : indice;
}