Java 缺少ArrayList打印值?
以此格式输入我的游戏时: 测试:120:120Java 缺少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
比赛:费夫,比分=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);