如何使用可迭代对象将UnorderedList中的元素转移到数组中

huangapple go评论94阅读模式
英文:

how to transfer elements from UnorderedList to array using iterable

问题

  1. public class Slope<E> implements Comparable {
  2. private Trail[] trail;
  3. private int ranking;
  4. private int count;
  5. public Slope(ArrayUnorderedList<Trail> path) {
  6. trail = new Trail[10];
  7. Iterator<Trail> iter = path.iterator();
  8. for (int i = 0; i < trail.length; i++) {
  9. while (iter.hasNext()) {
  10. trail[i] = iter.next();
  11. count++;
  12. }
  13. }
  14. }
  15. }

我想使用迭代器逐个将UnorderedList的每个元素传输到trail数组中,但它只会更新数组中的第一个值,其余值仍然指向null。

英文:
  1. public class Slope&lt;E&gt; implements Comparable {
  2. private Trail[] trail;
  3. private int ranking;
  4. private int count;
  5. public Slope (ArrayUnorderedList&lt;Trail&gt; path) {
  6. trail = new Trail[10];
  7. Iterator&lt;Trail&gt; iter = path.iterator();
  8. for (int i = 0; i &lt; trail.length; i++) {
  9. while (iter.hasNext()) {
  10. trail[i] = iter.next();
  11. count ++;
  12. }
  13. }
  14. }

I want to transfer each of the UnorderedList elements to the
trail array one-by-one using the iterator but it only updates the first value in the array and the rest still point to null.

答案1

得分: 0

问题出在你的循环结构上;你对每个i的值都迭代了一遍iter。这会导致你只会设置trail[0]的值,因为一旦你对i=0迭代完成,它就结束了;对于所有其他i的值,iter.hasNext()都将是false

要解决这个问题,你需要在没有封闭的for循环的情况下迭代iter,同时仍然需要跟踪一个运行中的索引,可能会像这样:

  1. public class Slope<E> implements Comparable {
  2. private Trail[] trail;
  3. private int ranking;
  4. private int count;
  5. public Slope(ArrayUnorderedList<Trail> path) {
  6. trail = new Trail[10];
  7. Iterator<Trail> iter = path.iterator();
  8. int i = 0;
  9. while (iter.hasNext() && i < trail.length) {
  10. trail[i++] = iter.next();
  11. count++;
  12. }
  13. }
  14. }
英文:

The issue is with your loop structure; you iterate over iter for every single value of i. This will cause you only ever to set the value of trail[0] because once you have iterated over iter for i=0, it's done; iter.hasNext() will be false for all other values of i.

To fix this, you will need to iterate over iter without an enclosing for-loop while still keeping track of a running index, which might look something like this:

  1. public class Slope&lt;E&gt; implements Comparable {
  2. private Trail[] trail;
  3. private int ranking;
  4. private int count;
  5. public Slope (ArrayUnorderedList&lt;Trail&gt; path) {
  6. trail = new Trail[10];
  7. Iterator&lt;Trail&gt; iter = path.iterator();
  8. int i = 0;
  9. while (iter.hasNext() &amp;&amp; i &lt; trail.length) {
  10. trail[i++] = iter.next();
  11. count++;
  12. }
  13. }
  14. }

huangapple
  • 本文由 发表于 2020年7月28日 22:16:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/63136218.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定