Errore (No line found") in fase di esecuzione

di il
2 risposte

Errore (No line found") in fase di esecuzione

Salve a tutti, sono nuovo su questo forum. Ho provato a scrivere un programma in Java ma continua a darmi errore e non capisco il motivo. Potreste aiutarmi? (P.S. Vorrei risolvere senza dover usare il costrutto try...catch)

Ho creato un classe Studente così definita:
package myPackage;

import java.util.Scanner;

public class Studente {
	private String nome;
	private String cognome;
	private int età;
	private double [] voti;
	private double media;
	boolean promosso;
	
	public Studente (String nome, String cognome, int età)
		{
		double [] voti = new double[3];
		double somma=0;
		this.nome = nome;
		this.cognome = cognome;
		this.età = età;
		Scanner input = new Scanner(System.in);
		for (int i=0; i<voti.length; i++)
			{
			System.out.print("Inserire il voto di "+this.nome+" "+this.cognome+": ");
			voti[i] = input.nextDouble();
			somma = somma + voti[i];
			}
		input.close();
		this.media = somma/3;
		if (this.media >= 6)
			this.promosso = true;
		else
			this.promosso = false;
		}
	
	public void stampa()
		{
		System.out.println("Studente: " + this.nome + " " + this.cognome + ", " + this.età + " anni");
		System.out.println("Media voto: " + this.media);
		if (this.promosso)
			System.out.println("Esito: Promosso");
		else
			System.out.println("Esito: Bocciato");
		}
	
	public String getNominativo()
		{
		return this.nome+" "+this.cognome;
		}
	
	public int getEtà()
		{ return this.età;}
	
	public double getMedia()
	{return this.media;}
}
Mentre il Main è il seguente:
import java.util.Scanner;
import myPackage.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
	String nome, cognome;
	int età;
	
	Studente [] stud = new Studente[5];
	Scanner sc = new Scanner(System.in);
	
	for (int i=0; i<stud.length; i++)
		{
		System.out.print("Inserire il nome dello studente: ");
		nome = sc.nextLine();
		System.out.print("Inserire il cognome dello studente: ");
		cognome = sc.nextLine();
		System.out.print("Inserire l'età di "+nome + " " + cognome + ": ");
		età = sc.nextInt();
		stud[i] = new Studente(nome, cognome, età);
		stud[i].stampa();
		}
	}
}
In fase di esecuzione per il primo oggetto gira, ossia mi chiede nome, cognome, età e i voti del primo studente, poi stampando tutti i dati. Quando però passa al secondo studente, ossia al secondo ciclo del for, mi dà il seguente errore:

Inserire il nome dello studente:
Inserire il cognome dello studente: Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at Main.main(Main.java:21)

2 Risposte

  • Re: Errore (No line found") in fase di esecuzione

    Il più grosso degli errori che stai facendo è la raccolta dell'input da tastiera dentro la classe Studente: no! La classe Studente dovrebbe solo memorizzare i dati di uno studente, non dovrebbe occuparsi di fare operazioni di I/O.

    E l'errore che ottieni è causa della scelta fatta: l'oggetto System.in è uno unico. Quindi dovrebbe essere costruito uno ed un solo oggetto Scanner a lui associato all'interno di tutta l'applicazione... tu ne stai costruendo uno per ciascuno studente che viene istanziato (sbagliatissimo!).

    Rivedi tutto:

    1) Modella la classe Studente affinchè si occupi solo di memorizzare le informazioni di uno studente (niente input/output, niente stampe, eventualmente predisponi un apposito metodo toString() ).

    2) Crea nel main l'oggetto Scanner (uno ed uno solo che andrai a riutilizzare per leggere tutti i dati degli studenti).

    3) Per ciascuno studente da leggere, usa l'oggetto Scanner costruito al punto 2.


    Ciao.
  • Re: Errore (No line found") in fase di esecuzione

    Grazie mille. Ho provato a rifarlo e ho risolto.
    Sono all'inizio di Java e sto cercando di imparare tutto fai da te...grazie ancora dell'aiuto.
Devi accedere o registrarti per scrivere nel forum
2 risposte