Domanda

Sto scrivendo un programma che legge l'input da un file e poi lo stampa sullo schermo. Quando eseguo senza prendere l'input dal file, funziona perfettamente bene. Tuttavia, ogni volta che cerco di eseguirlo dal file mi dà un "Exception in thread 'main' java.util.NoSuchElementException: Nessuna linea trovato in" errore che si verifica ogni luogo l'ingresso è supponiamo di essere letto. Non ho idea di cosa sta succedendo.

Questo programma è supponiamo di prendere l'input da parte dell'utente, creare un oggetto Foto, quindi stampare le informazioni sullo schermo. Tutto funziona benissimo quando sto inserendo le informazioni manualmente, ma quando provo ad usare Java Fototest Eccezione in filetto java.util.NoSuchElementException "principale": Nessuna linea trovato
  a java.util.Scanner.nextLine (Scanner.java:1516)
  a PhotoTest.readPhoto (PhotoTest.java:31)
  a PhotoTest.main (PhotoTest.java:74)

Il mio codice che ha in ingresso:

private static Photo readPhoto(Scanner scanner) throws ParseException
{
    Date dateTaken;

    Scanner scan = new Scanner(System.in);

    String subject = scan.nextLine();
    subject = subject.trim();

    String location = scan.nextLine();
    location = location.trim();

    String date = scan.nextLine();
    date = date.trim();
        if (date.equals("")){ //if the date is empty it is set to null
            dateTaken = null;
            }
        else { //if a date is entered, it is then parsed
            DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
            dateTaken = df.parse(date);
            }

    String file = scan.nextLine();
    file = file.trim();
    File photoFile = new File(file);

    //creates a Photo object from the information entered
    Photo Photo = new Photo(subject, location, dateTaken, photoFile);

    return Photo;
}

public static void main(String[] args) throws ParseException
{
    boolean endprogram = false;
    Scanner scan = new Scanner(System.in);

    //creates  a loop so that the user may enter as many photos as they wish
    while (!endprogram)
    {
        System.out.println("Would you like to enter a photo (y/n)?");

        //if the input is anything other than y, the program ends
        if(!scan.next().equalsIgnoreCase("y"))
        {
            endprogram = true;
        }
        else 
        {
            System.out.println(readPhoto(scan));
        }

    }
}
È stato utile?

Soluzione

  

Tutto funziona benissimo quando sto entrando le informazioni manualmente, ma quando provo ad usare java PhotoTest < test.dat per ottenere l'ingresso per [sic?] Un file [...]

Lo test.dat contenere le conferme "y" troppo? Quando si reindirizza in un file per stdin, il contenuto di tale file deve essere in formato legale come se fosse stato digitato manualmente.


Inoltre, si sta creando un'altra istanza Scanner per stdin anche se uno è già passato al readPhoto. Sei certo bisogno di fare questo?

Altri suggerimenti

Nel file è necessario un ritorno a capo nell'ultima riga. Questo sarebbe l'equivalente di ciò che si sta digitando manualmente. Si noti che quando si sta digitando, nell'ultima riga si preme Invio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top