【问题标题】:Return Arrays From Method as a Parameter从方法返回数组作为参数
【发布时间】:2021-04-19 08:00:46
【问题描述】:
public static void find( int[] numbers) {
    int[] range = new int[5];
    for(int i=0; i<numbers.length; i++) 
    {
        if(numbers[i]>=10 && numbers[i] <= 20) 
        {
            range[i]=range[i]+numbers[i];
        }
    }
}

我想编写一个方法,在一个数组中找到 10 到 20 之间的数字并将它们分配给另一个数组。 this is expected 这就是我得到的。 { 0 0 0 } are between 10 - 20 我该如何解决这个问题?

public static void read( int[] numbers) {
    Scanner input = new Scanner(System.in);
    for( int i=0; i<numbers.length;i++)
    {   
        System.out.print("Number["+i+"] => ");
        numbers[i] = input.nextInt();
    }
    input.close();
} 

这是从用户读取数字并分配给数组的 read() 方法。

public static void print( int[] numbers, int[]range) {
    
    System.out.println("Number = { "+ numbers[0]+" "+numbers[1]+" "+numbers[2]+" "+numbers[3]+" "+numbers[4]+" }");
    System.out.println("{ "+range[0]+" "+range[1]+" "+range[2]+" } "+" are between 10 - 20 ");
}

这是打印数字和范围数组的 print(x,y) 方法。

我的主要方法是:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] numbers = new int[5];
    read( numbers );
    int[] range = new int[5];
    find( numbers );
    print(numbers, range);

numbers 数组必须包含 3 个 10-20 之间的数字。

【问题讨论】:

  • 请不要将代码发布为图片。将它们作为代码与您的帖子一起发布。
  • 不要对范围使用与数字相同的运行变量
  • 如果你想让你的方法返回任何东西,它需要一个不同于void的返回类型。您的方法目前根本不返回任何对象。所以我不确定你是如何运行它来获得你发布的输出的。
  • 我还有 2 种方法。一个从 user 读取数组,另一个是写入数组和范围数组。
  • @crawlmontana 然后与我们分享这个

标签: java arrays loops methods


【解决方案1】:

解决方案

  • 将函数的返回类型更改为 int[]
  • 使用计数器预先计算范围数组的大小
  • 将范围内的值存储在范围数组中
  • 返回范围数组

注意不要将 i 运行变量也用于您的范围数组,如果您这样做时并非每个值都在您的范围内,结果数组将有间隙,表示值为零的值。

在读取函数中,您应该返回读入的值以在您的查找函数中使用它

public static int[] read(int size) {
    Scanner input = new Scanner(System.in);
    int[] numbers = new int[size];
    for(int i=0; i < size; i++)
    {   
        System.out.print("Number["+(i+1)+"] => ");
        numbers[i] = input.nextInt();
        // to remove the new line character
        input.nextLine();
    }
    input.close();
    return numbers;
} 

import java.util.*;
public class MyClass {
    public static void main(String args[]) {
        int[] values = MyClass.read(10);
        int[] result = MyClass.find(values);
        // result is now the return value of the find method
        // you can parse it now to another method of your choice
        System.out.println(Arrays.toString(result));

    }


    public static int[] find(int[] numbers) {
        int counter = 0;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] >= 10 && numbers[i] <= 20) {
                counter++;
            }
        }

        int[] range = new int[counter];


        int counter2 = 0;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] >= 10 && numbers[i] <= 20) {
                range[counter2] = numbers[i];
                counter2++;
            }

        }
        return range;

    }
    public static int[] read(int size) {
        Scanner input = new Scanner(System.in);
        int[] numbers = new int[size];
        for (int i = 0; i < size; i++) {
            System.out.print("Number[" + (i+1) + "] => ");
            numbers[i] = input.nextInt();
            // to remove the new line character
            input.nextLine();
        }
        input.close();
        return numbers;
    }
}    

【讨论】:

    【解决方案2】:

    1.您需要在“查找”函数中返回“范围”数组,否则无法访问。

    2. 您需要另一个变量“j”来指向“范围”数组的索引。 'numbers' 数组和 'range' 数组不能使用同一个变量。

    3.最好通过'read'函数传递'numbers'数组的大小,然后使用'read'函数读取数组。

    功能: find() 函数:

     public static int[] find( int[] numbers) {
        int[] range = new int[5];
        int j = 0;
        for(int i=0; i<numbers.length; i++) 
        {
            if(numbers[i]>=10 && numbers[i] <= 20) 
            {
                range[j]=range[j]+numbers[i];
                j++;
            }
        }
        return range;
    }
    

    read() 函数:

    public static int[] read( int n) {
        int[] numbers = new int[n];
        Scanner input = new Scanner(System.in);
        for( int i=0; i<numbers.length;i++)
        {   
            System.out.print("Number["+i+"] => ");
            numbers[i] = input.nextInt();
        }
        input.close();
        return numbers;
    } 
    

    print() 函数[保持不变]:

    public static void print( int[] numbers, int[]range) {
        
        System.out.println("Number = { "+ numbers[0]+" "+numbers[1]+" "+numbers[2]+" "+numbers[3]+" "+numbers[4]+" }");
        System.out.println("{ "+range[0]+" "+range[1]+" "+range[2]+" } "+" are between 10 - 20 ");
    }
    

    相应的主要功能:

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int[] numbers = read(n);
        int[] range = find(numbers);
        change(numbers);
        print(numbers, range);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2014-12-14
      • 2013-01-02
      • 1970-01-01
      相关资源
      最近更新 更多