【问题标题】:Resizing an Array with a Dedicated Method in Java使用 Java 中的专用方法调整数组大小
【发布时间】:2015-06-06 17:09:29
【问题描述】:

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

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 一起使用。我也无法将任何代码从一种方法移动到另一种方法。

【问题讨论】:

    标签: java arrays methods resize


    【解决方案1】:

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

    userNums = arrayResize(userNums, newSize);
    

    【讨论】:

      【解决方案2】:

      如果您需要用调整后的数组替换当前的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]
      

      【讨论】:

        猜你喜欢
        • 2012-04-15
        • 2011-09-22
        • 2021-04-30
        • 2011-02-25
        • 2021-12-21
        • 1970-01-01
        • 2011-04-27
        • 2015-04-16
        • 2013-07-22
        相关资源
        最近更新 更多