1

チュートリアルをコピーした後に作り始めたゲームを読み込もうとすると、そのエラーが発生します。

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at Maze.Map.readFile(Map.java:59)
at Maze.Map.<init>(Map.java:28)
at Maze.Board.<init>(Board.java:16)
at Maze.Maze.<init>(Maze.java:18)
at Maze.Maze.main(Maze.java:7)

このエラーを修正する方法を知っている場合は、助けてください。これがコードで、クラスファイルが一番上にあります。

Maze.java

package Maze;

import javax.swing.JFrame;

public class Maze {
public static void main(String[] args){
    new Maze();

}

public Maze(){
    JFrame f = new JFrame();
    f.setTitle("Maze Game");
    f.setSize(500,400);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(new Board());

}
}

Board.java

package Maze;

import java.awt.Graphics;
import java.awt.event.*;

import javax.swing.*;

public class Board extends JPanel implements ActionListener{

private Timer timer;

private Map m;

public Board(){

    m = new Map();

    timer = new Timer(25, this);
    timer.start();
}


public void actionPerformed(ActionEvent e){
    repaint();

}

public void paint(Graphics g){
    super.paint(g);

    for(int y = 0;y < 14; y++){
        for(int x = 0;x < 14; x++){
            if(m.getMap(x , y).equals("g")){
                g.drawImage(m.getGrass(), x * 32, y * 32, null);

            }
            if(m.getMap(x , y).equals("g")){
                g.drawImage(m.getWall(), x * 32, y * 32, null);

            }

        }
    }
}
}

Map.java

 package Maze;

import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;


import javax.swing.ImageIcon;

public class Map {

private Scanner m;

private String Map[] = new String[14];

private Image grass,
              wall;



public Map(){

    ImageIcon img = new ImageIcon("C://grass.png");
    grass = img.getImage();
    img = new ImageIcon("C://wall.png");
    wall = img.getImage();

    openFile();
    readFile();
    closeFile();
}

public Image getGrass(){
    return grass;
}

public Image getWall(){
    return wall;
}
public String getMap(int x, int y){
    String index = Map[y].substring(x,x + 1);
    return index;

}

public void openFile(){

    try {
        m = new Scanner(new File("C://map.txt"));
    } catch (FileNotFoundException e) {


    }

}

public void readFile(){
    while(m.hasNext()){
        for(int i = 0; i < 14; i++){
            Map[i] = m.next();
        }
    }
}

public void closeFile(){
    m.close();


}

}   

事前に助けてくれてありがとう。以前にコードを投稿して申し訳ありませんが、以前にコードを投稿したことはありません:/

4

3 に答える 3

1

java.util.NoSuchElementExceptionは、Iterator、Enumerator、Scanner、StringTokenizer などの Java のさまざまなクラスによってスローされる可能性のある RuntimeException です。基礎となるデータ構造に要素がない場合、これらのクラスにはすべて、次の要素または次のトークンをフェッチするメソッドがあります Java は「java.util.NoSuchElementException」をスローします。要素があるかどうかをチェックせずに hashmap を反復処理するこの最も一般的な例です。そのため、Iterator で next() を呼び出す前に hashNext() を使用することをお勧めします。

コードを投稿して解決してください。

于 2013-09-18T19:02:49.787 に答える
0

コレクションを繰り返し処理する場合は、イテレータのイディオムを使用しないでください。ただし、より現代的なものです。

for(T t : collection){
    // do something with t
}

はどこcollectionですかCollection<T>

これにより、エラーやまだ見つかっていないエラーが修正される場合があります。

于 2013-09-18T19:06:57.023 に答える
0

Scanner#next によると、ループhasNext()の外側とnext()内側のメソッドを呼び出していますforNoSuchElementException

NoSuchElementException がスローされる - 利用可能なトークンがそれ以上ない場合

したがって、readFile()このようにメソッドを変更します

    public void readFile()
    {        
        for(int i = 0; i < 14; i++)
        {
           while(m.hasNext()){
              Map[i] = m.next();
           }
       }
    }
于 2013-09-18T19:09:15.450 に答える