Rieccomi  Il prof mi ha chiesto una modifica a questo algoritmo che avevo creato in precedenza: 
import java.util.*;
public class VotoStudente {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		
		System.out.println("Quanti studenti devono partecipare all'esame");
		int studenti = input.nextInt();
		int [] voti = new int [studenti];
		
		int max;
		int min;
		int fre;
		double media;
		
		int i;
		
		for(i = 0; i<voti.length; i++) { //ciclo for per inserimento voti in array
			do { 
		System.out.println("Inserisci il "+(i+1)+" voto.");
		voti[i]=input.nextInt();
		
			}while(voti[i]<18 || voti[i]>30); //ciclo do while per controllo valore voto
			
		}
	
		media=0;
		max = voti[0];
		min = voti[0];
		fre = voti[0];
	
		for(i = 0; i<voti.length; i++) {
			
			media=media+voti[i]; //somma di tutti gli elementi dell'array voti
			
			if(max<voti[i]) { //se max è minore di voti[i]
				
				max=voti[i]; //max assumerà il valore di voti[i]
				
			}
			
			if(min>voti[i]) { //se min è maggiore di voti[i]
				
				min=voti[i]; //min assumerà il valore di voti[i]
			
			}
			
		}
			
		int [] oc = new int [studenti]; //creato array per registrare la frequenza di ogni elemento
		
		for(int p = 0; p<voti.length; p++) {
		for(i = 0; i<voti.length; i++) {
			
			if(voti[p]==voti[i]) { //se il voto dell'indice "p" è uguale a quello dell'indice "i"
				
				oc[p] = oc[p]+1; //conteggio frequenza di un singolo elemento dell'array oc
				
		}
		
		}
						
		}
		
		int maxf = oc[0]; //inizializzo una variabile maxf con il valore della prima cella dell'array oc
		for(int j = 1; j<oc.length; j++) {				
			if(oc[j]>oc[j-1]) { //cerco l'occorenza massima;
				
				maxf=j; //maxf gli do il valore dell'indice j
				fre=voti[maxf]; //in fre salvo il voto con più frequenza;
				System.out.println("Più frequente "+fre);
				break;
				
			}else if(oc[j]==oc[j-1]) {
				
				System.out.println("Non ci sono voti più frequenti");
				break;
			}
		}
			
					
		System.out.println("Il massimo è "+max);
		
		System.out.println("Il minimo è "+min);
		
		System.out.println("la media è "+(media/studenti));		
	
	}
	
}	
L'ho convertito in questo modo con ArrayList e Mappa, la modifica era in pratica poter inserire il valore del voto senza chiedere quanti voti volessi inserire, fin qui niente di particolarmente complicato a parte perderci un qualche ora , però oltre a questo mi ha chiesto di inserire i valori dei voti in una sola riga di input, tipo: 18, 20, 21, 26 ecc.... è fattibile come cosa? come faccio ad inserire in un ArrayList una sequenza di questo tipo?
import java.awt.List;
import java.util.*;
import java.util.Map.Entry;
public class VotoStudente1 {
	
public static Integer Occorrenze(ArrayList<Integer> voti) {
		
		Map<Integer, Integer> occorrenze = new HashMap<Integer, Integer>(); 
		
		for (Integer occV : voti) { 
			
	        Integer j = occorrenze.get(occV); 
	        occorrenze.put(occV, (j == null) ? 1 : j + 1); 
	        
		} 
		
	    // Mostra voto con maggior frequenza
		Map.Entry<Integer, Integer> maxOcc = null;
	    for (Map.Entry<Integer, Integer> occ : occorrenze.entrySet()) {
	    	
	        if (maxOcc == null || occ.getValue().compareTo(maxOcc.getValue()) > 0); {
	        	maxOcc = occ;
	    	
	    }
	        
	    }
	    
	    return maxOcc.getKey();
	    
	}
	   
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		
		int max;
		int min;
		double media;
		int i=0;
		boolean stopvoti = true;
		
		ArrayList <Integer> voti = new ArrayList <Integer>();
		
		System.out.println("Inserisci un voto");
		voti.add(input.nextInt());
			
			while (stopvoti) {
					
				int SiNo;
				System.out.println("Vuoi inserire un'altro voto? 1 per SI/ 2 per NO");
				SiNo = input.nextInt();
				
				if (SiNo==1) {
					System.out.println("Inserisci voto");
					voti.add(input.nextInt());
					
				}else if (SiNo==2) {
					stopvoti = false;
					
				}else System.out.println("Scelta non valida");
				
			}			
		media=0;
		max = voti.get(0);
		min = voti.get(0);
	
		for(i = 0; i<voti.size(); i++) {
			
			media=media+voti.get(i); //somma di tutti gli elementi dell'array voti
			
			if(max<voti.get(i)) { //se max è minore di voti[i]
				
				max=voti.get(i); //max assumerà il valore di voti[i]
				
			}
			
			if(min>voti.get(i)) { //se min è maggiore di voti[i]
				
				min=voti.get(i); //min assumerà il valore di voti[i]
			
			}
			
		}	
			
		System.out.println("Il voto più frequente è "+Occorrenze(voti));
		
		System.out.println("Il voto massimo è "+max);
		
		System.out.println("Il voto minimo è "+min);
		
		System.out.println("la media dei voti è "+(media/voti.size()));		
	
}
}