有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将随机整数迭代到数组中

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

[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) 个答案

  1. # 1 楼答案

    您会得到一个奇怪的输出,因为数组的toString方法没有显示包含数组单个成员的字符串;相反,对于基元类型为int的数组,它显示一个奇怪的字符串,该字符串从[I@开始

    您应该手动准备字符串,或者调用Arrays.toString(myArray),如下所示:

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

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

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

    public String getRandomValue() {
      return Arrays.toString(val);
    }
    
  3. # 3 楼答案

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

  4. # 4 楼答案

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

    您可能可以使用is:-

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

    但为什么要将整数数组追加并存储到字符串引用中

    如果您想要输出一些随机值,那么可能可以使用ArrayList并在该列表上使用Collections.shuffle来洗牌它。如果需要单个随机值,则可以获取first值。但这并不是获得随机值的非常有效的方法。因为它不够随机

  5. # 5 楼答案

    方法:

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

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

    如果你想从数组中得到一个随机值,你需要在getRandomValue中加入一些随机性