Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 Ex 7.4)_Java_Arrays - Fatal编程技术网

理解用随机数填充数组(大Java Ex 7.4)

理解用随机数填充数组(大Java Ex 7.4),java,arrays,Java,Arrays,问题陈述 class seq { private int[] arr; private int[] filledArr; private Random randNum; public seq() { randNum = new Random(); arr = new int[10]; filledArr = new int[10]; } public int [] generateNewA

问题陈述

class seq
{
    private int[] arr;
    private int[] filledArr;
    private Random randNum;

    public seq()
    {
        randNum = new Random();
        arr = new int[10];
        filledArr = new int[10];
    }

    public int [] generateNewArr()
    {
        for(int i = 1; i< 11 ; i++)
        {
            filledArr[i] = i;
        }
        return filledArr;
    }

    public int [] newArr()
    {
        for(int i=1; i < 11 ; i++)
        {
            int newRandNum = //RANDOM NUMBER IN filledArr;
            arr[i] = newRandNum;
            // REMOVE that random number from filledArr
        }
    }

}
编写一个程序,生成数字1到1的随机排列 10要生成随机排列,需要用数字1到10填充数组,以便数组中没有两个条目具有相同的值 目录你可以用蛮力,通过调用Random.nextInt 直到它生成一个尚未在数组中的值。相反,你 应该实施智能方法。制作第二个数组并用 数字是1到10。然后随机选取其中一个,将其移除,然后 将其附加到置换数组。重复10次。实现一个类 具有int[]nextPermutation方法的置换生成器

我很难理解这个问题的意思

我的解释是,我们需要将数字1-10放入数组中,给定一些从1到10的随机数

我解决这个问题的方法是简单地添加到一个数组并进行循环,然后检查下一个随机数是否已经在数组中。然而,根据问题,这被认为是“暴力”

通过实现第二个数组,我不太确定我的书在说什么。如果我做了第二个数组,我还需要检查数组中是否有东西

我的尝试 首先我试着把10个随机数放到一个数组中,忽略了它们必须是不同的部分。这是我的

private int[] arr;
private Random randNum;

public seq()
{
    randNum = new Random();
    arr = new int[10];
}

public int getRandNum()
{
    int newNum = randNum.nextInt(10)+1;
    return newNum;
}

public int [] filledArr()
{
    for (int i = 0 ; i<arr.length; i++)
    {
        arr[i] = getRandNum();
    }
    return arr;
}
尝试使用ArrayList

 import java.util.Random;
import java.util.ArrayList;
class seq
{
    private ArrayList<Integer> arrListOne;
    private ArrayList<Integer> arrListTwo;
    private Random num;
    public seq()
    {
        num = new Random();
        arrListOne = new ArrayList<Integer>(10);
        arrListTwo = new ArrayList<Integer>(10);
    }
    public ArrayList getFilledArr()
    {
        for(int i = 1; i < arrListOne.size()+1 ; i++)
        {
            arrListOne.add(i);
        }
        return arrListOne;
    }
    public ArrayList randNewArr()
    {
        for(int i = 0 ; i < 10 ; i++)
        {
        int randNum = num.nextInt(arrListOne.size())+1;
        arrListTwo.add(arrListOne.get(randNum));
        arrListOne.remove(arrListOne.get(randNum));
        }
        return arrListTwo;
    }

    public String toString()
    {
        String output = "The Randomized ArrayList is";
        output+=arrListTwo;
        return output;
    }
}

public class Sequence
{
    public static void main(String [] args)
    {
    seq seqObj = new seq();
    seqObj.getFilledArr();
    seqObj.randNewArr();
    System.out.println(seqObj.toString());
    }

}
import java.util.Random;
导入java.util.ArrayList;
类别seq
{
私人ArrayList arrListOne;
private ArrayList Arrlist 2;
私有随机数;
公开序号()
{
num=新随机数();
arrListOne=新的ArrayList(10);
arrListTwo=新的ArrayList(10);
}
公共数组列表getFilledArr()
{
对于(int i=1;i
问题是我必须调用getRandNum()10次才能得到10个不同的数字,然后调用filledar将其放入其中。这是大量的打字。有更好的办法吗

是的

使用以下命令:

public int [] filledArr()
{
    for (int i = 0 ; i < arr.length; i++)
    {
        arr[i] = randNum.nextInt(10)+1;
    }

return arr;
}
public int[]filledArr()
{
对于(int i=0;i
所以你编码得更少,结果是一样的

问题是我必须调用getRandNum()10次才能得到10个不同的数字,然后调用filledar将其放入其中。这是大量的打字。有更好的办法吗

是的

使用以下命令:

public int [] filledArr()
{
    for (int i = 0 ; i < arr.length; i++)
    {
        arr[i] = randNum.nextInt(10)+1;
    }

return arr;
}
public int[]filledArr()
{
对于(int i=0;i

因此,您编写的代码更少,结果是相同的。

问题只是说:

制作一个数字为1-10的数组(不必随机排序)。然后 生成一个介于1-10之间的随机数,然后选择该数字并删除该索引 从前面创建的数组中

粗略的实施将是:

ArrayList nums = new ArrayList<Integer>(); // The arraylist with numbers from 1-10
for(int i = 1; i < 11; i++;)
    nums.add(i);

Random r = new Random();
int x = r.nextInt(10);

int[] finalNums = new int[2];
finalNums[0] = nums.get(x);
nums.remove(x); // Remove the number at this index so it won;t be picked up again

x = r.nextInt(9); // Since we removed one index from arraylist, so total elements are now nine instead of 10.
finalNums[1] = nums.get(x);
nums.remove(x);
或者您也可以在
seq
class'构造函数中调用这些方法:

public seq()
{
    randNum = new Random();
    arr = new int[10];
    filledArr = new int[10];
    this.getFilledArr();
    this.randNewArr();
}
另外需要注意的是,显示ArrayList输出的方法是正常。对您的代码稍加修改:

import java.util.Random;
import java.util.ArrayList;
class seq
{
    private ArrayList<Integer> arrListOne;
    private ArrayList<Integer> arrListTwo;
    private Random num;

    public seq()
    {
        num = new Random();
        arrListOne = new ArrayList<Integer>();
        arrListTwo = new ArrayList<Integer>();
        getFillerArr();
        randNewArr();
    }

    // You dont have to return ArrayList here
    public void getFilledArr()
    {
        for(int i = 1; i < 11 ; i++)
        {
            arrListOne.add(i);
        }
    }

    // You dont have to return ArrayList here
    public void randNewArr()
    {
        for(int i = 0 ; i < 10 ; i++)
        {
            int randNum = num.nextInt(arrListOne.size())+1;
            arrListTwo.add(arrListOne.get(randNum));
            arrListOne.remove(arrListOne.get(randNum));
        }
    }

    // A method that returns you random array list so you can easily use it following rules of encapsulation
    public ArrayList<Integer> getRandomArray() {
        return this.arrListTwo;
    }
}

public class Sequence
{
    public static void main(String[] args){
        seq seqObj = new seq();
        System.out.println(seq.getRandomArray());
    }
}
说明:

arrListOne=newarraylist(10);
您正在尝试创建一个固定大小为10的数组列表?但是ArrayList没有固定的大小。所以这行不通。因此,此循环也会失败:

public ArrayList getFilledArr()
{
    for(int i = 1; i < arrListOne.size()+1 ; i++)
    {
        arrListOne.add(i);
    }
    return arrListOne;
}
public ArrayList getFilledArr()
{
对于(int i=1;i
(数组列表的大小为0,因此循环不会运行)

因此,在获取随机数时会出现异常


PS:我的错,我已经有一段时间没有使用java了。不知何故,我在阅读代码时忽略了它。

问题只是说:

制作一个数字为1-10的数组(不必随机排序)。然后 生成一个介于1-10之间的随机数,然后选择该数字并删除该索引 从前面创建的数组中

粗略的实施将是:

ArrayList nums = new ArrayList<Integer>(); // The arraylist with numbers from 1-10
for(int i = 1; i < 11; i++;)
    nums.add(i);

Random r = new Random();
int x = r.nextInt(10);

int[] finalNums = new int[2];
finalNums[0] = nums.get(x);
nums.remove(x); // Remove the number at this index so it won;t be picked up again

x = r.nextInt(9); // Since we removed one index from arraylist, so total elements are now nine instead of 10.
finalNums[1] = nums.get(x);
nums.remove(x);
或者您也可以在
seq
class'构造函数中调用这些方法:

public seq()
{
    randNum = new Random();
    arr = new int[10];
    filledArr = new int[10];
    this.getFilledArr();
    this.randNewArr();
}
另外需要注意的是,显示ArrayList输出的方法是正常。对您的代码稍加修改:

import java.util.Random;
import java.util.ArrayList;
class seq
{
    private ArrayList<Integer> arrListOne;
    private ArrayList<Integer> arrListTwo;
    private Random num;

    public seq()
    {
        num = new Random();
        arrListOne = new ArrayList<Integer>();
        arrListTwo = new ArrayList<Integer>();
        getFillerArr();
        randNewArr();
    }

    // You dont have to return ArrayList here
    public void getFilledArr()
    {
        for(int i = 1; i < 11 ; i++)
        {
            arrListOne.add(i);
        }
    }

    // You dont have to return ArrayList here
    public void randNewArr()
    {
        for(int i = 0 ; i < 10 ; i++)
        {
            int randNum = num.nextInt(arrListOne.size())+1;
            arrListTwo.add(arrListOne.get(randNum));
            arrListOne.remove(arrListOne.get(randNum));
        }
    }

    // A method that returns you random array list so you can easily use it following rules of encapsulation
    public ArrayList<Integer> getRandomArray() {
        return this.arrListTwo;
    }
}

public class Sequence
{
    public static void main(String[] args){
        seq seqObj = new seq();
        System.out.println(seq.getRandomArray());
    }
}
说明:

arrListOne=newarraylist(10);
您正在尝试创建一个固定大小为10的数组列表?但是ArrayList没有固定的大小。所以这行不通。因此,此循环也会失败:

public ArrayList getFilledArr()
{
    for(int i = 1; i < arrListOne.size()+1 ; i++)
    {
        arrListOne.add(i);
    }
    return arrListOne;
}
public ArrayList getFilledArr()
{
对于(int i=1;i
(数组列表的大小为0,因此循环不会运行)

因此,在获取随机数时会出现异常


PS:我的错,我已经有一段时间没有使用java了。不知何故,我在阅读代码时忽略了它。

提示:似乎您没有理解建议的“智能”方法;会议应按以下程序进行:

  • 生成一个10个整数的数组,不是随机的,只需将所有数字
    Card deck[], temp;
    int i, j;
    
    // fill the deck
    for (i = 0; i < 10; i++) deck[i] = i;
    
    // Shuffle 'em.  Runs stern-to-stem because of 'rand()'
    for (i = 9; i > 0; i--) {   // no need for (i == 0) ...
      j = rand(i);   // returns value in the inclusive range [0..i]
    
      // it's just fine if (i == j) ... although it usually won't be ...
      temp    = deck[i];    // set-aside the card in the cursor-position
      deck[i] = deck[j];    // replace it with the randomly-chosen card
      deck[j] = temp;       // then put the original card where it can get picked
    }