将随机整数迭代到数组中

时间:2012-10-19 13:45:00

标签: java arrays

大家好我试图通过一个数组迭代并用随机值填充每个Array元素。唯一的问题是我得到奇怪的输出,如

  

[I @ 4b142196

我在Array Example

上找到的示例

但在我的代码中使用它时,它将无法正常工作。这是我得到的:

package h05GrootsteWaarde;
import javax.swing.*;
import java.util.*;

public class GetallenGenerator extends JPanel {
    public GetallenGenerator() {
    }
    int[] val = new int[21];
    Random generator = new Random();    
    public void setRandomValue() {
        for (int i = 0; i < val.length; i++) {
            val[i] = generator.nextInt(201) - 100;
        }    
    }   
    public int[] getRandomValue() {     
        return val;     
    }
}

以下是我如何调用函数

package h05GrootsteWaarde;
import javax.swing.*;
import java.awt.event.*;
public class Bediening extends JPanel implements ActionListener {
    GetallenGenerator generator;
    private JButton bereken;
    private JTextArea veld;

    public Bediening(GetallenGenerator generator) {     
        this.generator = generator;     
        bereken = new JButton("Bereken kleinste");
        bereken.addActionListener(this);
        add(bereken);       
        veld = new JTextArea(13, 40);
        veld.setEditable(false);
        veld.setWrapStyleWord(true);
        veld.setLineWrap(true);
        add(veld);      
        generator.setRandomValue();
    }   
    public void actionPerformed ( ActionEvent e ) {     
        String hoi = " " + generator.getRandomValue();
        veld.append(hoi);       
    }
}

5 个答案:

答案 0 :(得分:3)

你得到一个奇怪的输出,因为数组的toString方法没有显示包含数组的各个成员的字符串;相反,它显示了一个奇怪的字符串,从[I@开始,用于基本类型int的数组。

您应手动准备字符串,或拨打Arrays.toString(myArray),如下所示:

int[] arr = generator.getRandomValue();
String arrStr = Arrays.toString(arr);
String hoi = arrStr.substring(1, arrStr.length()-1);

答案 1 :(得分:2)

方法generator.getRandomValue();返回一个整数数组。因此,如果您打印它,它会打印您的数组的String Representation,您会看到它类似于数组引用的HashCode。因此,当您尝试使用空字符串附加它并将其存储在另一个字符串中时,您将无法获得所需的结果。

你可以使用的是: -

String hoi = " " + Arrays.toString(generator.getRandomValue());

但是为什么要追加然后将整数数组存储到String引用中?

如果您想要一些随机值,那么可能您可以使用ArrayList并使用该列表上的Collections.shuffle对其进行随机播放。如果您想要一个随机值,那么您可以获取first值。但这不是获得随机值的非常有效的方法。因为它不够随意。

答案 2 :(得分:2)

方法:

public int[] getRandomValue() {
    return val;
}

...不会从数组返回随机值 - 它返回数组引用本身。您将看到[I@4b142196字符串,因为这是数组的默认字符串表示形式。 (第一部分表示类型;第二部分表示哈希码。)

如果你想从数组中获取一个随机值,你需要实际将一些随机性放入getRandomValue ......

答案 3 :(得分:0)

您正在向int[]添加JTextArea。它显示在int []上调用toString()的结果,这是内存引用。

您可能应该将getRandomValue()方法修改为以下内容:

public String getRandomValue() {
  return Arrays.toString(val);
}

答案 4 :(得分:0)

如果您想要生成的值,则需要覆盖toString方法。 在您编写的代码中,将为您提供内存引用,而不是生成的值。