gpt4 book ai didi

java - 为什么我会得到 "java.util.NoSuchElementException"?

转载 作者:行者123 更新时间:2023-12-01 17:17:09 25 4
gpt4 key购买 nike

这是我遇到的错误...

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:60)
at Maze.Map.<init>(Map.java:23)
at Maze.Board.<init>(Board.java:16)
at Maze.Maze.<init>(Maze.java:15)
at Maze.Maze.main(Maze.java:9)

下面是我的代码!

package Maze;

import javax.swing.*;

public class Maze
{

public static void main(String[] args)

{
new Maze();
}

public Maze()

{

JFrame f = new JFrame();

f.setTitle("Maze Game");

f.add(new Board());
f.setSize(464, 485);
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
<小时/>
package Maze;

import java.awt.*;
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.getFloor(), x * 32, y * 32, null);
}
if(m.getMap(x, y).equals("w"))
{
g.drawImage(m.getWall(), x * 32, y * 32, null);
}
}
}

}

}
<小时/>
package Maze;

import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.ImageIcon;

public class Map
{
private Scanner m;
private String Map[] = new String[14];
private Image floor,
wall;

public Map()
{
ImageIcon img = new ImageIcon("C://Test//MazeGame//floor.jpg");
floor = img.getImage();
img = new ImageIcon("C://Test//MazeGame//wall.jpg");
wall = img.getImage();

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

public Image getFloor()
{
return floor;
}

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://Test//MazeGame//Map.txt"));
}catch(Exception e)
{
System.out.print("Error Loading Map!");
}
}

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



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

}

最佳答案

我不知道这是否是您的错误(您没有告诉我们哪一行是 Map 类的第 60 行,即导致异常的行),但这是危险的代码:

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

您在每个循环迭代中调用 hasNext() 一次,但调用 next() 14 次!应该存在严格的 1 对 1 相关性,因为每个 next() 应与前面的 hasNext() 匹配。

<小时/>

此外,没有理由使用嵌套 for 循环,因为 while 循环将处理您需要的所有内容。您可能会遇到这样的情况:

int i = 0;
while(m.hasNext()) {
Map[i] = m.next();
i++;
}

但是使用 ArrayList 比使用数组更安全。

<小时/>

顺便说一句,请学习并遵循 Java 编码约定。方法和字段/变量/参数都应以小写字母开头,因此不允许使用 Map[i],而应该是 map[i]。这样做将帮助我们更好地理解和遵循您的代码,从而为您提供帮助。

关于java - 为什么我会得到 "java.util.NoSuchElementException"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com