Question

Je suis en train d'écrire un programme qui lit l'entrée d'un fichier, puis imprime à l'écran. Quand je lance sans prendre l'entrée du fichier, il fonctionne parfaitement bien. Cependant, chaque fois que je tente de l'exécuter à partir du fichier, il me donne une « Exception dans le thread « principal » java.util.NoSuchElementException: Aucune ligne trouvée à » erreur qui se produit chaque lieu l'entrée est supposé être lu. Je ne sais pas ce qui se passe.

Ce programme est supposé prendre l'entrée de l'utilisateur, créer un objet photo, puis imprimez les informations à l'écran. Tout fonctionne très bien quand je suis entrée, mais les informations manuellement lorsque je tente d'utiliser java Phototest Exception dans le thread « principal » java.util.NoSuchElementException: Aucune ligne trouvée
  à java.util.Scanner.nextLine (Scanner.java:1516)
  à PhotoTest.readPhoto (PhotoTest.java:31)
  à PhotoTest.main (PhotoTest.java:74)

Mon code qui a l'entrée:

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));
        }

    }
}
Était-ce utile?

La solution

  

Tout fonctionne bien quand je suis entrée, mais les informations manuellement lorsque je tente d'utiliser java PhotoTest < test.dat pour obtenir l'entrée pour [sic?] Un fichier [...]

Est-ce que test.dat contiennent les confirmations de "y" aussi? Lorsque vous conduit dans un fichier pour stdin, le contenu de ce fichier doit être au format juridique que si elle a été saisie manuellement.


En outre, vous créez une autre instance de Scanner pour stdin même si on est déjà passé à readPhoto. Êtes-vous sûr que vous devez faire cela?

Autres conseils

Dans votre fichier, vous avez besoin d'un retour chariot dans la dernière ligne. Ce serait l'équivalent de ce que vous tapez manuellement. Notez que lorsque vous tapez, dans la dernière ligne vous appuyez sur Entrée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top