Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 Array方法,返回一个新数组,其中每个数字都由“;自身”;#时代_Java_Arrays_Multiplicity - Fatal编程技术网

Java Array方法,返回一个新数组,其中每个数字都由“;自身”;#时代

Java Array方法,返回一个新数组,其中每个数字都由“;自身”;#时代,java,arrays,multiplicity,Java,Arrays,Multiplicity,我正在尝试用Java编写一个方法,该方法接收一个数组并返回一个新数组,其中每个数字都被打印了相同的次数。下面是一个输入和输出示例:“123043”->“1234344433”。我被卡住了,我的程序无法编译。有人知道我哪里出错了吗 public static int [] multiplicity(int [] nums) { for (int i = 0 ; i < nums.length ; i++) { int size = nums.length + 1;

我正在尝试用Java编写一个方法,该方法接收一个数组并返回一个新数组,其中每个数字都被打印了相同的次数。下面是一个输入和输出示例:“123043”->“1234344433”。我被卡住了,我的程序无法编译。有人知道我哪里出错了吗

public static int [] multiplicity(int [] nums) {
    for (int i = 0 ; i < nums.length ; i++) {
        int size = nums.length + 1;
        int newNums[] = new int [size];
        for (int j = 0 ; j < nums.length ; j++) {
            int value = nums[j];
            for (int v = 0 ; v < value ; v++) {
                newNums[j + v] = value;
            }
        }
    }
    return newNums;
}
公共静态int[]多重性(int[]nums){
对于(int i=0;i
一旦初始化了
int[]newNums
,就无法动态调整其大小。再次初始化它将丢弃上一个数组

下面是另一种解决问题的方法:

public static int [] multiplicity (int [ ] nums)
{
    // create a list to contain the output
    List<Integer> newNums = new ArrayList<Integer>();

    // for each incoming int
    if(nums != null) {
        for (final int i : nums)
        {
            // repeat adding the value
            for(int j = 0; j < i; j++) {
                newNums.add(i);
            }
        }
    }

    // now copy from the List<Integer> to the result int[]
    int[] result = new int[newNums.size()];
    for(int i=0; i < newNums.size(); i++) {
        result[i] = newNums.get(i);
    }

    // return the result
    return result;
}
公共静态int[]多重性(int[]nums)
{
//创建一个包含输出的列表
List newNums=newarraylist();
//对于每个传入int
如果(nums!=null){
用于(最终int i:nums)
{
//重复添加值
对于(int j=0;j
您当前的代码没有正确调整新数组的大小,您可以很容易地修复编译器错误,如

int size=nums.length+1;
int newNums [] = new int [size];
for (int i=0; i<nums.length; i++)
{
  // int size=nums.length+1;
  // int newNums [] = new int [size];
然后你可以像这样测试它

public static void main(String arg[]) {
    int[] in = { 1, 2, 3, 0, 4, 3 };
    int[] out = multiplicity(in);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < out.length; i++) {
        if (i != 0) {
            sb.append(' ');
        }
        sb.append(out[i]);
    }
    String expected = "1 2 2 3 3 3 4 4 4 4 3 3 3";
    System.out.println(expected.equals(sb.toString()));
}

在浏览整个输入数组之前,您无法知道新数组的大小。 所以你可以

  • 探索整个数组并计算长度,然后重新探索输入数组并填充新数组。您只需要1个内存分配(只需要1个新的int[])
  • 创建一个向量并填充它。然后使用.toarray方法
填充数组的示例(检查其大小是否正确)

int k=0
for(int i:nums){
对于(int j=0;j
“我的程序将无法编译”,请告诉我们编译器错误是什么。上面说“newNums无法解析为变量”您的程序有很多我现在可以看到的缺陷。拿着一张纸坐下来,一步一步地复习。首先也是最重要的一点是,看看您初始化新int数组的方式。你给我们的例子有意义吗?想象一下如果
nums
的长度为0会发生什么。您的第一个for循环将永远不会被输入,
newNums
将永远不会被创建,您的return语句试图返回不存在的内容。“for(int num:nums)”中的冒号有什么作用?@AlN。这就是循环。您可以在
nums
中为每个
num
读取它。或者您可以使用类似于(int t=0;t的东西。对于每个,我更喜欢
public static void main(String arg[]) {
    int[] in = { 1, 2, 3, 0, 4, 3 };
    int[] out = multiplicity(in);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < out.length; i++) {
        if (i != 0) {
            sb.append(' ');
        }
        sb.append(out[i]);
    }
    String expected = "1 2 2 3 3 3 4 4 4 4 3 3 3";
    System.out.println(expected.equals(sb.toString()));
}
true
int k = 0
for(int i: nums) {
    for(int j = 0; j < i; j++) {
        newArray[k] = i;
        k++;
    }
}