【问题标题】:Why doesn't my array output the correct values? [duplicate]为什么我的数组没有输出正确的值? [复制]
【发布时间】:2016-02-20 15:29:13
【问题描述】:

我对 java 还很陌生,所以如果这是一个愚蠢的问题,我深表歉意,但我一直从基础开始并逐步建立。我最近从一个教程中进入了数组,我让它们在不同的实例中工作,但现在它们似乎没有输出正确的值。这是我的代码:

import java.util.Random;

class mainstart {
public static void main (String[] args) {
    Random rand = new Random();
    int freq[]=new int[7];

    for(int roll = 0; roll<1000; roll++){
        ++freq[1+rand.nextInt(6)];
    }

    System.out.println("Face\tFrequency");

    for(int face=1;face<freq.length;face++){
        System.out.println(face + "\t" + freq);
    }
}
}

这个程序应该掷骰子 1000 次并在图表中列出频率,但是当我运行代码时,它会给我一个数字和字母序列,如下所示:

Face    Frequency
1       [I@6d06d69c
2       [I@6d06d69c
3       [I@6d06d69c
4       [I@6d06d69c
5       [I@6d06d69c
6       [I@6d06d69c

我最初偏离了教程,以帮助我更好地记住它而不是直接复制,但即使在那之后我也无法让它工作。除了类名之外,我最终逐行复制,但仍然无法让它输出值,即使我看到它对其他人工作得很好。

我不确定我是否可以在此处链接视频,但至于我是否更改了设置?还是只是我忽略了一些简单的事情? 我试着研究了这个,但我不太知道在哪里找,希望有人能提供帮助。

【问题讨论】:

  • System.out.println(face + "\t" + freq[face]);...
  • 确实如此。您要求输出freq所在的内存地址,而不是数组中存储的值。
  • 请不要忘记:您的数组从索引 0 开始。而您从 1 开始面对。
  • 感谢大家的快速回复
  • @Auzias 这不是内存位置,它只是数组的toString(),其中包括哈希码,与普遍认为的相反,它与大多数 JVM 中的内存地址无关实现。

标签: java


【解决方案1】:

修改代码希望我的代码有帮助

     Random rand = new Random();
int freq[]=new int[7];

for(int roll = 0; roll<1000; roll++){
    ++freq[1+rand.nextInt(6)];
}

System.out.println("Face\tFrequency");

for(int face=1;face<freq.length;face++){
    System.out.println(face + "\t" + freq[face]);
}

快乐编码

【讨论】:

    【解决方案2】:

    您正在将一个数组打印到输出,并且该数组的 toString() 方法不是那么 readebla 这就是问题所在。如果你想打印数组的元素,你应该遍历数组并打印实际元素 yourArray[index] 或者你可以只使用 Arrays.toString(yourArray)

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多