Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何打印嵌套的ArrayList?_Java - Fatal编程技术网

Java 如何打印嵌套的ArrayList?

Java 如何打印嵌套的ArrayList?,java,Java,我的第四个for循环for(int y)不断重复打印前m个元素,如何修复它,使它一次打印m个元素,而不是相同的元素 Scanner input = new Scanner(System.in); int n = input.nextInt(); int m = input.nextInt(); ArrayList<String> myname = new ArrayList<String>(n); ArrayList<Integer> myscore =

我的第四个for循环for(int y)不断重复打印前m个元素,如何修复它,使它一次打印m个元素,而不是相同的元素

Scanner input = new Scanner(System.in);

int n = input.nextInt();
int m = input.nextInt();

ArrayList<String> myname = new ArrayList<String>(n);
ArrayList<Integer> myscore = new ArrayList<Integer>(m);
for (int i = 0; i < n; i++) { //swimmers
  myname.add(input.next());
  for (int j = 0; j < m; j++) { //judges
    myscore.add(input.nextInt());
  }
}
for (int x = 0; x < n; x++) { //name
  System.out.println(myname.get(x));

  for (int y = 0; y < m; y++) { //score
    System.out.println(myscore.get(y));
  }
}
扫描仪输入=新扫描仪(System.in);
int n=input.nextInt();
int m=input.nextInt();
ArrayList myname=新的ArrayList(n);
ArrayList myscore=新的ArrayList(m);
对于(inti=0;i
因为你有一个
myscore
n*m
长度的列表,而不仅仅是你想象的
m
。您将在列表的末尾添加每个分数

因此,列表中有
n
m
元素块。您仍然可以使用

for(int y = x * m, to = x*m + m; y < to; ++y){
    System.out.println(myscore.get(y));
}
for(int y=x*m,to=x*m+m;y
班级计分员{
字符串名称=”;
ArrayList分数=新的ArrayList;
公共记分员(字符串名称){
this.name=name
}
}
然后

ScoreHolder[] scores = new ScoreHolder[n];

for (int i = 0; i < n; i++) { //swimmers
  scores[i] = new ScoreHolder(input.next());
  for (int j = 0; j < m; j++) { //judges
    scores[i].scores.add(input.nextInt());
  }
}

for (int x = 0; x < n; x++) { //name
  System.out.println(scores[x].name);

  for (int y = 0; y < m; y++) { //score
    System.out.println(scores[x].scores.get(y));
  }
ScoreHolder[]分数=新的计分员[n];
对于(inti=0;i
}

现在使用它不仅很容易,而且做任何更改或做任何你想做的事情都会容易得多

我所做的只是创建了一个holder类,它将保存游泳运动员的名字和他所有分数的列表


这个抽象现在可以帮助你获得游泳运动员的分数,或者做任何你现在想做的事情。

根据你的代码,似乎你有n个游泳运动员,每个人都有m个分数。您正在将“n”名游泳者的姓名存储在ArrayList中,这很糟糕,因为您知道数字永远不会更改。更好的方法是将myname声明为大小为n的字符串[],而不是调用myname.get(x),稍后您将调用myname[x]。 然而,这只是与手头的问题有关的症状。您将所有分数结果存储在单个ArrayList中。一个更好的解决方案是生成“n”个数组(根据这个问题的标题,我假设您希望这样做)。这可以通过简单地声明 所有分数[][]=新整数[n][m]

这将允许您使用allScores[n]访问游泳者编号“n”的值。如果这不是您真正想要做的,那么您可以简单地用您已经处理的分数数(x*n)抵消上一个get语句中的值

TLDR:将上一个for循环中的行更改为:
System.out.println(myscore.get(y+x*n)

请回答您的问题,并使用IDE的“格式”正确设置代码的格式选项,这样我们就可以看到哪些循环嵌套在哪个级别。现在几乎无法读取。这里没有嵌套列表。相同的列表是什么意思?这意味着没有重复?在这种情况下,可能会有很多不打印m内容的情况。您在上面的代码中维护两个单独的列表。@B.Naeem,自动装箱存在。我正在尝试要获得类似于循环1的输出:循环2的输出,循环2的输出…循环1的输出:循环2的输出,循环2的输出…等等,用户想要多少次就多少次。(如果有意义的话)在照片中,我给每个游泳者放了两个数字,它显示了第一个的正确结果,但是对于第二个游泳者,它再次显示了第一个的结果(3,7),而不是他自己的结果(7,6)@Alberkko我明白了,因为你的每个分数都一个接一个地在同一个列表中,所以我发布的循环是根据
x
乘以
m
的正确值来确定正确的分数块。TLDR工作了,谢谢!!我会尝试一下,并按照你建议的方式执行。是的,看起来像这是一个更好的方法。谢谢!肯定是“正确”的解决方案,我不确定OP是否知道如何像这样管理POJO(使用getter/setter更好;)。PS:您应该使用
toString
在分数列表上执行循环。
ScoreHolder[] scores = new ScoreHolder[n];

for (int i = 0; i < n; i++) { //swimmers
  scores[i] = new ScoreHolder(input.next());
  for (int j = 0; j < m; j++) { //judges
    scores[i].scores.add(input.nextInt());
  }
}

for (int x = 0; x < n; x++) { //name
  System.out.println(scores[x].name);

  for (int y = 0; y < m; y++) { //score
    System.out.println(scores[x].scores.get(y));
  }