【问题标题】:Passing elements of array to method that accepts ints (Java)将数组元素传递给接受整数的方法(Java)
【发布时间】:2017-07-22 00:56:19
【问题描述】:

我正在尝试创建一个数字数组,将它们传递给只接受 int 作为参数的静态方法,并将最大 int 返回给要打印的 main(这些是作业规范)。 max 方法自己工作,但我无法将我在 main 中输入的数组传递给函数,并取回最大值。任何帮助表示赞赏。

import java.util.Scanner;

public class findMax {
    public static int max(int val1, int val2, int val3) {
        int[] intArray = new int[3];
        val1 = intArray[0];
        val2 = intArray[1];
        val3 = intArray[2];
        int max = Math.max(Math.max(val1, val2), val3);
        System.out.println(max);
        return max;
    }

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] intArray = new int[3];
    System.out.println("Enter 3 integers: ");
    for (int i = 0; i < intArray.length; i++) {
        intArray[i] = sc.nextInt();
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < intArray.length; i++) {
        if (i > 0) {
            sb.append(", ");
        }
        sb.append(intArray[i]);
    }
    System.out.println("Input values: " + sb.toString());
    max(intArray[0], intArray[1], intArray[2]);
    System.out.println(max(intArray[0], intArray[1], intArray[2]));
    sc.close();
}

}

【问题讨论】:

    标签: java arrays int typecasting-operator


    【解决方案1】:

    您的 max 方法用零覆盖了它的参数,所以不,它不能单独工作。

    public static int max(int val1, int val2, int val3) {
        int[] intArray = new int[3]; // {0, 0, 0}
        val1 = intArray[0]; // <-- val1 = 0
        val2 = intArray[1]; // <-- val2 = 0
        val3 = intArray[2]; // <-- val3 = 0
        int max = Math.max(Math.max(val1, val2), val3);
        System.out.println(max);
        return max;
    }
    

    应该是这样的

    public static int max(int val1, int val2, int val3) {
        return Math.max(Math.max(val1, val2), val3);
    }
    

    那么您的main 方法应该会按预期工作(但您不需要像那样调用max 两次,只需在打印时调用一次)。

    // max(intArray[0], intArray[1], intArray[2]);
    System.out.println(max(intArray[0], intArray[1], intArray[2]));
    

    并且您可能更喜欢 Arrays.toString(intArray); 而不是当前的 for 循环。

    或者,您可以将max 设为可变参数(假设您使用的是Java 8+,请使用IntStream)。喜欢,

    public static int max(int... values) {
        return IntStream.of(values).max().orElse(-1);
    }
    

    可以这样称呼

    System.out.println(max(intArray));
    

    System.out.println(max(1, 2, 3, 4, 5));
    

    【讨论】:

    • 我显然是在想这个问题。非常感谢您的帮助。
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多