the - system exception java example




Nessuna eccezione di questo tipo? (3)

Quindi ecco il mio codice:

public static void getArmor(String treasure)
    throws FileNotFoundException{
    Random rand=new Random();
    Scanner file=new Scanner(new File ("armor.txt"));
    while(!file.next().equals(treasure)){
        file.next(); //stack trace error here
        }
    int min=file.nextInt();
    int max=file.nextInt();
    int defense=min + (int)(Math.random() * ((max - min) + 1));
    treasure=treasure.replace("_", " ");
    System.out.println(treasure);
    System.out.println("Defense: "+defense);
    System.out.println("=====");
    System.out.println();
    }

public static void getTreasureClass(Monster monGet)
throws FileNotFoundException{
    Random rand = new Random();
    String tc=monGet.getTreasureClass();
    while (tc.startsWith("tc:")){
        Scanner scan=new Scanner(new File ("TreasureClassEx.txt"));
        String eachLine=scan.nextLine();
        while(!tc.equals(scan.next())){
        eachLine=scan.nextLine();
        }
        for (int i=0;i<=rand.nextInt(3);i++){
            tc=scan.next();
        }
    getArmor(tc); //stack trace error here
    }
 }

Per qualche motivo ottengo un'eccezione No Such Element

    at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1416)
at LootGenerator.getArmor(LootGenerator.java:43)
at LootGenerator.getTreasureClass(LootGenerator.java:68)
at LootGenerator.getMonster(LootGenerator.java:127)
at LootGenerator.theGame(LootGenerator.java:19)
at LootGenerator.main(LootGenerator.java:11)

Non sono sicuro del perché comunque. Fondamentalmente il mio programma sta cercando tra due file di testo: armor.txt e TreasureClassEx.txt. getTreasureClass riceve una classe di tesori da un mostro e cerca nel txt fino a raggiungere un oggetto di armatura di base (una stringa che non inizia con tc :.) Quindi cerca getArmor per un'armatura che corrisponde al nome dell'armatura di base che ha ottenuto classe del tesoro. Tutto il consiglio sarebbe apprezzato! Grazie!

Il link ai file txt è qui: http://www.cis.upenn.edu/~cis110/hw/hw06/large_data.zip


Sembra che la tua riga file.next () nel ciclo while stia lanciando NoSuchElementException poiché lo scanner ha raggiunto la fine del file. Leggi l'API java next () qui

Inoltre non si dovrebbe chiamare next () nel ciclo e anche nel caso while. Nel frattempo si dovrebbe verificare se il token successivo è disponibile e all'interno del ciclo while verificare se è uguale al tesoro.


Sembra che tu stia chiamando dopo anche se lo scanner non ha più un elemento successivo da fornire ... lanciando l'eccezione.

while(!file.next().equals(treasure)){
        file.next();
        }

Dovrebbe essere qualcosa di simile

boolean foundTreasure = false;

while(file.hasNext()){
     if(file.next().equals(treasure)){
          foundTreasure = true;
          break; // found treasure, if you need to use it, assign to variable beforehand
     }
}
    // out here, either we never found treasure at all, or the last element we looked as was treasure... act accordingly

Mi sono imbattuto nello stesso problema mentre mi occupavo di set di dati di grandi dimensioni. Una cosa che ho notato è che la NoSuchElementException viene lanciata quando lo Scanner raggiunge il file endOfFile , dove non influirà sui nostri dati.

Qui, ho inserito il mio codice nel try block e catch block handle catch block . Puoi anche lasciarlo vuoto, se non vuoi eseguire alcun compito.

Per la domanda precedente, poiché stai utilizzando file.next() sia nella condizione che nel ciclo while puoi gestire l'eccezione come

while(!file.next().equals(treasure)){
    try{
        file.next(); //stack trace error here
       }catch(NoSuchElementException e) {  }
}

Questo ha funzionato perfettamente per me, se ci sono casi d'angolo per il mio approccio, fammi sapere attraverso i commenti.





exception