Java 缺少ArrayList打印值?

Java 缺少ArrayList打印值?,java,arraylist,Java,Arraylist,以此格式输入我的游戏时: 测试:120:120 比赛:120:120 退出 我的txt文件仅显示我的第一个条目,而不是第二个条目,在我的文本文件中显示如下: 球员:亚当 游戏:测试,分数=120,游戏分钟=120 但我想让它显示: 游戏:测试,分数=120,游戏分钟=120 比赛:费夫,比分=3412,比赛分钟=434 到目前为止,我的代码是: import java.io.FileOutputStream; 导入java.io.IOException; 导入java.io.PrintWrit

以此格式输入我的游戏时:

测试:120:120
比赛:120:120
退出

  • 我的txt文件仅显示我的第一个条目,而不是第二个条目,在我的文本文件中显示如下:

    球员:亚当


    游戏:测试,分数=120,游戏分钟=120

  • 但我想让它显示:

    游戏:测试,分数=120,游戏分钟=120
    比赛:费夫,比分=3412,比赛分钟=434

  • 到目前为止,我的代码是:

    import java.io.FileOutputStream;
    导入java.io.IOException;
    导入java.io.PrintWriter;
    导入java.util.ArrayList;
    导入java.util.List;
    导入java.util.Scanner;
    公共类生成器{
    私有静态字符[]输入;
    公共静态void main(字符串[]args){
    int[]分钟播放=新int[100];
    字符串gamerName、gamerReport;
    字符串[]游戏名=新字符串[100];
    整数[]高分=新整数[100];
    @抑制警告(“资源”)
    扫描仪扫描=新扫描仪(System.in);
    System.out.println(“--------------游戏分数报告生成器-----------------”;
    System.out.println(“”);
    System.out.print(“输入您的姓名”);
    System.out.println(“”);
    gamerName=Scan.nextLine();
    布尔值isEmpty=gamerName==null | | gamerName.trim().length()==0;
    如果(我是空的){
    System.out.print(“输入您的姓名”);
    gamerName=Scan.nextLine();
    }
    System.out.println(“以这种格式输入详细信息-“+”-->游戏:成就分数:播放分钟数”);
    System.out.println(“”);
    System.out.println(“游戏:成就分数:播放分钟”);
    gamerReport=Scan.nextLine();
    扫描仪=新的扫描仪(System.in);
    List al=新的ArrayList();
    字符串字;
    而(scanner.hasNextLine()){
    word=scanner.nextLine();
    如果(字!=null){
    word=word.trim();
    if(word.equalsIgnoreCase(“quit”){
    打破
    }
    加(字);
    }否则{
    打破
    }
    }
    字符串[]splitUpReport;
    splitUpReport=gamerReport.split(“:”);
    int i=0;
    gameNames[i]=splitUpReport[0];
    highScores[i]=Integer.parseInt(splitUpReport[1].trim());
    minutesPlayed[i]=Integer.parseInt(splitUpReport[2].trim());
    尝试
    {
    PrintWriter writer=新的PrintWriter(新文件输出流(“Gaming Report Data.txt”,true));
    writer.println(“玩家:+gamerName”);
    writer.println();
    writer.println(“-------------------------------------”);
    writer.println();
    String[]report=gamerReport.split(“:”);
    writer.println(“游戏:“+report[0]+”,score=“+report[1]+”,minutes played=“+report[2]);
    writer.close();
    }捕获(IOE异常)
    {
    System.err.println(“文件不存在!”);
    }    
    }                   
    公共静态字符[]getInput(){
    返回输入;
    }
    }
    
    您的第一个分数输入存储在一个名为
    gamerReport
    的变量中,但之后的每个分数输入都会添加到名为
    al
    的数组列表中。在代码末尾,您仅从
    gamerReport
    变量(仅包含第一个分数)中提取数据

    您可能需要重写分数输入代码,以便在循环期间将其所有代码添加到
    al
    ArrayList中,然后让文本输出部分在
    al
    中迭代

    捕获和存储输入的示例代码
    Scanner Scanner=新的扫描仪(System.in);
    ArrayList al=新的ArrayList();
    字串=”;
    while(true){
    word=scanner.nextLine();
    如果(word!=null)word=word.trim();
    如果(word.equalsIgnoreCase(“退出”))中断;
    加(字);
    }
    系统输出打印项次(al);
    
    此代码解决了将数据存储在两个不同变量中的问题(现在所有数据都存储在
    al
    中,
    gamerReport
    已被删除,因为它不需要)。要在以后将其打印到文件中,您应该对其进行迭代(使用类似于(String str:al){…}的
    for(String str:al){…})


    请注意,此代码根本不是用户证明。研究正则表达式以防止用户输入无效数据可能是明智的做法。

    关于如何操作的任何建议,您能否为我指出正确的方向。为了收集输入,您可以使用while循环,当用户输入“退出”时终止。啊,仍然不确定如何操作,因此必须重做整个程序。
    Scanner scanner = new Scanner(System.in);
    ArrayList<String> al = new ArrayList<>();
    String word = "";
    
    while (true) {
        word = scanner.nextLine();
        if (word != null) word = word.trim();
        if (word.equalsIgnoreCase("quit")) break;
        al.add(word);
    }
    
    System.out.println(al);