java - 尝试将数组的克隆保存在 txt 文件中但返回 NULL

标签 java arrays text

我正在制作一个应用程序,将游戏中的用户名和分数保存在 txt 文件中。这个概念是,当它将新的用户名和分数写入 txt 文件时,它应该打开 .txt 文件,读取它,然后对其进行克隆,在 txt 中添加新的用户名和分数条目文件。

我正在考虑用 2 个对象数组来实现它。第一个是读入的,新的将是写入的,其中还会有一个条目。

因此,如果player[i]被读取,player[i+1]应该用新条目写入。

我给你下面的代码!

private Player[] myplayer=null;
private Player[] mynewplayer=null;

//open Players.txt
      int i;
      int n;
      String filename="players.txt";
      try
      {

         FileReader fp=new FileReader(filename);
         BufferedReader bf=new BufferedReader(fp);
         n=Integer.parseInt(bf.readLine());
         myplayer=new Player[n];
         int x=n+1;
         mynewplayer=new Player[x];
         for(i=0;i<n;i++)
         {
             String s=bf.readLine();
             String user="",score="";
             user=s.substring(0,s.indexOf(","));
             s=s.substring(s.indexOf(",")+1);
             score=s;
             myplayer[i]=new Player(user,Double.parseDouble(score));

            for(i=0;i<n;i++)
            {
                     mynewplayer[i]= myplayer[i];
            }
            mynewplayer[x]=new Player(Username,Double.parseDouble(score));
         }

         bf.close();
         fp.close();
        }catch(IOException e)
        {
            System.out.println("Exception was "+e.getMessage());
        }



    //----------------------------------WRITE mytxt!-------------
      n=myplayer.length;
      try
      {
         filename="players.txt";
         FileWriter fp=new FileWriter(filename);
         fp.write(""+n+"\n");
         for(i=0;i<n+1;i++)
           fp.write(""+mynewplayer[i]+"\n");

         fp.close();
        }catch(IOException e)
        {
            System.out.println("Exception was "+e.getMessage());
        }
    //----------------------------------WRITE mytxt!-----------

    //Get on Message
      String s="";
      for(i=0;i<mynewplayer.length;i++)
        s=s+mynewplayer[i]+"\n";
      JOptionPane.showMessageDialog(null,"Players are \n "+s);

问题是,当它被写入时,它会为mynewplayer返回null。 我想 mynewplayer 并没有真正获取“myplayer”的条目,但也没有写入新的用户名。

编译没有显示任何错误。只需将 NULL 写入文本文件即可。

询问我是否需要有关所编写代码的更多信息!

提前致谢!

最佳答案

这是您的代码的编辑版本,进行了一些改进,并且应该在我更改的代码周围有一个注释,解释我所做的事情。

    Player[] myPlayer = null;     // first word uncapitalized, every 
    Player[] myNewPlayer = null;  // other word begins with a capital

    //open Players.txt
    int i, n; // combine the variables into 1 line        
    String filename = "players.txt";

    try {

        FileReader fp = new FileReader(filename);
        BufferedReader bf = new BufferedReader(fp);
        n = Integer.parseInt(bf.readLine());
        // not needed
        //myPlayer = new Player[n];
        // NOT NEEDED int x = n + 1;
        myNewPlayer = new Player[n + 1];

        for (i = 0; i < n; i++) {
            String s = bf.readLine();
            String user, score; // combine variables, doesnt need to initalize them

            String[] items = s.split(","); // Splits the line into array elements on every delimiter -> ,

            //user = s.substring(0, s.indexOf(","));
            //s = s.substring(s.indexOf(",") + 1);
            //score = s;
            user = items[0];
            score = items[1];
            // this line below isnt actually needed
            //myPlayer[i] = new Player(user, Double.parseDouble(score));
            // Create a new player clone, dont copy the previous one
            myNewPlayer[i] = new Player(user, Double.parseDouble(score));

        }

        // We've read all the variables from the text file, now we create the last one
        // Since myNewPlayer is (n+1) size, the range of the array is
        // 0 to n
        // the last index will be n                            New Score Variable
        myNewPlayer[n] = new Player("Username variable", Double.parseDouble("22"));

        bf.close();
        fp.close();
    } catch (IOException e) {
        System.out.println("Exception was " + e.getMessage());
    }

    //----------------------------------WRITE mytxt!-------------
    // This is called a ternary operator
    // it is a 1 line if statement
    // the format is like so
    //   booleanLogic ? trueAnswer Execution : falseAnswer Execution;
    //         if ()  {       true          }else {         false  }
    n = myNewPlayer != null ? myNewPlayer.length : 0;
    // CHANGED HERE - was using the first array rather than second
    // dont need the 1st array
    try {
        filename = "players.txt";
        FileWriter fp = new FileWriter(filename);
        // Dont need "" before the items
        fp.write(n + "\n");
        for (i = 0; i < n; i++) {
            fp.write(myNewPlayer[i] + "\n");
        }

        fp.close();
    } catch (IOException e) {
        System.out.println("Exception was " + e.getMessage());
    }
    //----------------------------------WRITE mytxt!-----------

    //Get on Message
    String s = "";
    for (i = 0; i < myNewPlayer.length; i++) {
        // s += ""; is like doing s = s + "";
        s += myNewPlayer[i] + "\n";
    }

    JOptionPane.showMessageDialog(null, "Players are \n " + s);

关于java - 尝试将数组的克隆保存在 txt 文件中但返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34598813/

相关文章:

javascript - 如何淡化背景图像以便链接/文本可见?

java - Java 中的用户输入和 .equals() 问题

java - 导入 Maven 模块中的 Lombok

java - Eclipse 说无法解析类的静态字段

c - 变量作为结构中的数组大小

c - 这是一个有效的 Tic Tac Toe 获胜条件检查器功能吗?

java - Dagger 2 的可交换模块

arrays - ReDim 数组但保留值

html - 标题中图像上的文字

javascript - 正则表达式插入 html 标签而不创建无效的 html