用Java中的专用方法调整数组的大小



我对此束手无策。我需要创建一个数组,然后使用一个单独的方法来调整它的大小,然后使用另一种方法打印它。这是我迄今为止的代码:

import java.util.Scanner;
public class Lab07 {
public static void main(String[] args)
{
    //Variables
    int userSize;
    int newSize;
    int diff;
    //Scanner
    @SuppressWarnings("resource")
    Scanner kb = new Scanner(System.in);

    do{
        System.out.println("Input an array size: ");
        userSize = kb.nextInt();    
    }while(!(userSize>0));
double[] userNums = new double[userSize];
    System.out.println("Now please enter "+userSize+" numbers.");
    //Gathering Input
    for(int i= 0; i < userNums.length; i++)
    {
        System.out.println("Input a number into your array: ");
        userNums[i] = kb.nextDouble();
    }
    //Print Array
    System.out.println("Here are all the numbers in your array:");
    printArray(userNums);
    //New Size
    System.out.println();
    do{
        System.out.println("Input a new size: ");
        newSize = kb.nextInt(); 
    }while(!(newSize>userSize));
    diff = newSize-userSize;
    System.out.println("You need to add "+diff+" new values.");
    //Resize
    arrayResize(userNums, newSize);
    //New input
    for(int i= userNums.length; i <= newSize; i++)
    {
        System.out.println("Input a number into your array: ");
        newArray[i] = kb.nextDouble();
    }
    printArray(newArray);
}
public static void printArray(double[] arr)
{
    System.out.print("[");
    for(int j=0; j<arr.length; j++){
        if(!(j==(arr.length-1)))
            {
            System.out.print(+arr[j]+", ");
            }
        else{
            System.out.print(+arr[j]);
        }
    }   
    System.out.print("]");
}
public static double[] arrayResize(double[] oldArray, int newSize)
{
    double[] newArray = new double[newSize];
    for(int i=0; i<newArray.length; i++)
    {
        if(i<oldArray.length)
        {
        newArray[i] = oldArray[i];
        }
        else
        {
            newArray[i] = 0.0;
        }
    }
    return newArray;

我需要我的结果看起来像这样:

Input an array size: 5
Now please enter 5 numbers
Input a number into your array: 10.0
Input a number into your array: 6.5
Input a number into your array: 4.4
Input a number into your array: 0.0
Input a number into your array: 15.0
Here are all the numbers in your array: 
[10.0, 6.5, 4.4, 0.0, 15.0]
Input a new size: 7
You need to add 2 values
Input a number to add to your array: 42.42
Input a number to add to your array: 84.99
Here are all the numbers in your new array: 
[10.0, 6.5, 4.4, 0.0, 15.0, 42.42, 84.99]

我的问题是何时调用arrayResize。我不知道如何将新值放入数组,也不知道如何在printArray中使用它。我也不能将任何代码从一个方法移动到另一个方法。

您需要分配arrayResize(userNums, newSize);的结果。您返回了一个值,但没有对其执行任何操作,因此userNums与调用resize方法之前保持不变。试试这个:

userNums = arrayResize(userNums, newSize);

如果您需要用调整大小的数组替换当前的userNums,只需执行:

userNums = arrayResize(userNums, newSize);

arrayResize()方法中,不需要用0.0填充newArray的其余部分,因为这已经是创建double[]数组时的默认值。此外,您只需要循环到oldArray.length,因为在那之后就没有更多的元素可以添加到newArray

public static double[] arrayResize(double[] oldArray, int newSize) {
    double[] newArray = new double[newSize];
    for(int i = 0; i < oldArray.length; i++) {
        newArray[i] = oldArray[i];
    }
    return newArray;
}

使用System.arraycopy():可以很容易地实现此方法

static double[] arrayResize(double[] oldArray, int newSize) {
    double[] newArray = new double[newSize];
    System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
    return newArray;
}

示例:

double[] old = {1.5, 2.5, 3.5};
double[] resized = arrayResize(old, 6);
printArray(resized);

输出:

[1.5, 2.5, 3.5, 0.0, 0.0, 0.0]

最新更新