Java Can';无法让扫描仪从文件中读取

Java Can';无法让扫描仪从文件中读取,java,arrays,file,oop,Java,Arrays,File,Oop,我正在命令行中制作一个Battle Royale游戏,我在两个文本文件中记录了机器人的名字和姓氏。现在我尝试用两个扫描器读取这两个文件,然后将名字放在一个数组中,将姓氏放在另一个数组中 游戏是面向对象的,因此有3个文件: 文件#1(应用程序) 文件#2(游戏) 文件#3(世界) 包装tp2; 导入java.io.*; 导入java.util.*; 导入java.util.concurrent.TimeUnit; 公共阶级世界{ 私人静态最终int MAX_玩家=42; 私有静态字符串firstN

我正在命令行中制作一个Battle Royale游戏,我在两个文本文件中记录了机器人的名字和姓氏。现在我尝试用两个扫描器读取这两个文件,然后将名字放在一个数组中,将姓氏放在另一个数组中

游戏是面向对象的,因此有3个文件:

文件#1(应用程序)

文件#2(游戏)

文件#3(世界)

包装tp2;
导入java.io.*;
导入java.util.*;
导入java.util.concurrent.TimeUnit;
公共阶级世界{
私人静态最终int MAX_玩家=42;
私有静态字符串firstNamesArray[]=新字符串[MAX_PLAYERS];
私有静态字符串lastNamesArray[]=新字符串[MAX_PLAYERS];
私人静态玩家[]=新玩家[最大玩家];
专用静态扫描仪扫描者姓名;
专用静态扫描仪扫描仪lastnames;
公共静态void printNamesArrays(){
System.out.println(“”);
System.out.println(“可用的名字”);
System.out.println(“--------------------------”;
对于(int i=0;i

为了澄清,我创建了一个方法来打印两个数组中的名字和姓氏,但在执行该方法时它只打印“NULL”。这只意味着扫描仪由于某些原因无法读取这两个文件…

您可以修改createNamesArray()函数并删除closeNameFiles()和openNameFile()

我已经更新了your World.java(如果您使用的是java:8)

公共类世界{
私人静态最终int MAX_玩家=42;
私有静态字符串firstNamesArray[]=新字符串[MAX_PLAYERS];
私有静态字符串lastNamesArray[]=新字符串[MAX_PLAYERS];
私有静态int firstnamentrienfile;
私有静态int lastnamentriesinfile;
公共静态void printNamesArrays(){
System.out.println(“”);
System.out.println(“可用的名字”);
System.out.println(“--------------------------”;
对于(int i=0;i
不过,如果您想按照自己的方式来做,我的建议是使用FileReader

我建议使用ArrayList,它可以处理动态大小调整,而数组需要预先定义大小,您可能知道也可能不知道。查看您的代码,我发现您已经定义了大小

BufferedReader in = new BufferedReader(new FileReader("fullpath/firstnames.txt"));
String str;

List<String> list = new ArrayList<String>();
while((str = in.readLine()) != null){
    list.add(str);
}

firstNamesArray = list.toArray(new String[list.size()]);
BufferedReader in=new BufferedReader(新文件读取器(“fullpath/firstnames.txt”);
字符串str;
列表=新的ArrayList();
而((str=in.readLine())!=null){
添加(str);
}
firstNamesArray=list.toArray(新字符串[list.size()]);
类似于姓氏数组

另外,使用静态是不明智的,因为第一个也是最重要的原因是线程安全,第二个是面向对象的概念


别担心,有一天我们都处在你的位置上,然后我们随着时间学习。没什么大不了的

请注意,静态不是真正面向对象的,尤其是静态字段不是!建议学习调试,例如尝试使用对象而不是扫描仪。如果你刚刚开始学习Java,这很好。你确定文件的格式正确吗?这段代码有效(经过测试)。
package tp2;

public class Game {

    private Level currentLevel;
    private Player player;

    public void start() throws InterruptedException {
        World.createNameArrays();
        World.printNamesArrays();              
    }
}
package tp2;

import java.io.*;
import java.util.*;
import java.util.concurrent.TimeUnit;

public class World {
    private static final int MAX_PLAYERS = 42;
    private static String firstNamesArray[] = new String[MAX_PLAYERS];
    private static String lastNamesArray[] = new String[MAX_PLAYERS];
    private static Player players[] = new Player[MAX_PLAYERS];

    private static Scanner scannerFirstNames;
    private static Scanner scannerLastNames;

    public static void printNamesArrays() {
        System.out.println("");
        System.out.println("First names available");
        System.out.println("---------------------");
        for (int i = 0; i < MAX_PLAYERS; ++i) {
            System.out.println(firstNamesArray[i]);
        }
        System.out.println("");
        System.out.println("Lats names available");
        System.out.println("---------------------");
        for (int i = 0; i < MAX_PLAYERS; ++i) {
            System.out.println(lastNamesArray[i]);
        }
    } 

    public static void createNameArrays() {        
        openNameFiles();
        int i = 0;
        while (scannerFirstNames.hasNext() && scannerLastNames.hasNext()) {
            System.out.println("**********Test*************");
            firstNamesArray[i] = scannerFirstNames.nextLine();
            lastNamesArray[i] = scannerLastNames.nextLine();
            ++i;            
        }
        closeNameFiles();
    }

    public static void closeNameFiles() {
        scannerFirstNames.close();        
        scannerLastNames.close();
    }

    public static void openNameFiles() {
        try {
            scannerFirstNames = new Scanner(new File("firstnames.txt"));
        } catch(FileNotFoundException e) {
            System.out.println("Error! File not found.");
        }
        try {
            scannerLastNames = new Scanner(new File("lastnames.txt"));
        } catch(FileNotFoundException e) {
            System.out.println("Error! File not found.");
        }        
    }
}
public class World {

  private static final int MAX_PLAYERS = 42;
  private static String firstNamesArray[] = new String[MAX_PLAYERS];
  private static String lastNamesArray[] = new String[MAX_PLAYERS];
  private static int firstNameEntriesInFile;
  private static int lastNameEntriesInFile;

  public static void printNamesArrays() {
    System.out.println("");
    System.out.println("First names available");
    System.out.println("---------------------");
    for (int i = 0; i < MAX_PLAYERS && i < firstNameEntriesInFile; ++i) {
      System.out.println(firstNamesArray[i]);
    }
    System.out.println("");
    System.out.println("Lats names available");
    System.out.println("---------------------");
    for (int i = 0; i < MAX_PLAYERS && i < lastNameEntriesInFile; ++i) {
      System.out.println(lastNamesArray[i]);
    }
  }

  public static void createNameArrays() {
    try {
      String[] fNames = Files.lines(new File("fullpath/firstname.txt").toPath()).toArray(String[]::new);
      if (fNames.length == 0) {
        throw new RuntimeErrorException(null, "no first name entry found in the given file");
      } else {
       firstNameEntriesInFile=fNames.length;
       firstNamesArray=fNames;
      }
      String[] lNames = Files.lines(new File("fullpath/lastname.txt").toPath()).toArray(String[]::new);
      if (lastNamesArray.length == 0) {
        throw new RuntimeErrorException(null, "no last name entry found in the given file");
      }else {
        lastNameEntriesInFile=lNames.length;
        lastNamesArray=lNames;
       }
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("file can't be accessed: cause " + e.getMessage());
    }
  }
}
BufferedReader in = new BufferedReader(new FileReader("fullpath/firstnames.txt"));
String str;

List<String> list = new ArrayList<String>();
while((str = in.readLine()) != null){
    list.add(str);
}

firstNamesArray = list.toArray(new String[list.size()]);