Java 如何在用户定义的数组中获取最小值和最大值?
我想得到数组中的最小值和最大值。用户输入n个数组后,它将打印该数组中的最小值和最大值 下面是一个示例输出 这是到目前为止我的代码Java 如何在用户定义的数组中获取最小值和最大值?,java,arrays,max,minimum,Java,Arrays,Max,Minimum,我想得到数组中的最小值和最大值。用户输入n个数组后,它将打印该数组中的最小值和最大值 下面是一个示例输出 这是到目前为止我的代码 public static void main(String[] args) { Scanner input = new Scanner(System.in); try { System.out.println("Enter array size: "); int n
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
System.out.println("Enter array size: ");
int n = input.nextInt();
int [] array = new int[n];
int max = getMaxValue(array);
int min = getMinValue(array);
System.out.println("Enter " + n + " elements:");
for (int i = 1; i <= array.length; i++) {
array[i] = input.nextInt();
}
System.out.println("Max Value: " + max);
System.out.println("Min Value: " + min);
} catch (InputMismatchException e) {
System.out.println("INVALID INPUT >> PLEASE INPUT A NUMBER");
}
}
private static int getMaxValue(int[] array) {
int maxValue = array[0];
for (int i = 1; i < array.length; i++){
if (array[i] > maxValue){
maxValue = array[i];
}
}
return maxValue;
}
private static int getMinValue(int[] array) {
int minValue = array[0];
for (int i = 1; i < array.length; i++){
if (array[i] < minValue) {
minValue = array[i];
}
}
return minValue;
}
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
试一试{
System.out.println(“输入数组大小:”);
int n=input.nextInt();
int[]数组=新的int[n];
int max=getMaxValue(数组);
int min=getMinValue(数组);
System.out.println(“输入“+n+”元素:”);
对于(int i=1;i最大值){
最大值=数组[i];
}
}
返回最大值;
}
私有静态int getMinValue(int[]数组){
int minValue=数组[0];
for(int i=1;i
有几个问题使该程序无法运行:
i您的代码中出现以下3个问题:
int max=getMaxValue(数组)
int min=getMinValue(数组)
在错误的位置调用
初始化int数组时,数组中的默认值为0
。
因此,当您调用getMaxValue()
array[0]=0
与数组中的所有剩余值(即0
)进行比较,其中0是最大值。
这同样适用于getMinValue()
您调用了函数getMaxValue()
和getMinValue()
,但没有使用用户输入填充数组。
您应该使用从0到array.length的for循环
这将导致ArrayIndexOutOfBoundException,因为数组索引从0到n-1开始,您允许它一直运行到1到n
此外,可以在一个函数中查找最小值和最大值。
通过将返回类型保持为数组
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
System.out.println("Enter array size: ");
int n = input.nextInt();
int [] array = new int[n];
System.out.println("Enter " + n + " elements:"); // <-- changed
for (int i = 0; i < array.length; i++) {
array[i] = input.nextInt();
}
int max_min[] = getMax_MinValue(array); // <- notice this.
System.out.println("Max Value: " + max_min[0]);
System.out.println("Min Value: " + max_min[1]);
} catch (InputMismatchException e) {
System.out.println("INVALID INPUT >> PLEASE INPUT A NUMBER");
}finally {
input.close(); // close the scanner
}
}
// return type changed
private static int[] getMax_MinValue(int[] array) {
int maxValue = array[0];
int minValue = array[0];
for (int i = 0; i < array.length; i++){
if (array[i] > maxValue){
maxValue = array[i];
}
if(array[i] < minValue) {
minValue = array[i];
}
}
int min_max[] = {maxValue,minValue}; // min_max[0] has max value and min_max[1] has min value
return min_max;
}
这不是一个恰当的答案
但是,由于getMaxValue
和getMinValue
的实现有一个轻微的缺陷:空数组将引发ArrayIndexOutOfBoundException
尤其是可以使用流类
private static int getMaxValue(int[] array) {
return IntStream.of(array).max().orElse(0);
}
private static int getMinValue(int[] array) {
return IntStream.of(array).min().orElse(0);
}
max
和min
生成一个optionant
,对于空数组,可以给出一个默认值(orElse
)。问题是什么?您必须在请求用户输入后计算最大值和最小值,而不是之前。您还应该将try/catch放在靠近输入的位置。按照现在的方式,如果他们输入格式错误的文本,就会中断循环。当我运行程序时,它不会在数组中显示最大值和最小值。例如,在输入n个数组之后,程序将在此之后结束,但不显示最小值和最大值。它不显示数组中的最大值和最小值,因为在调用最小/最大方法时,数组不包含任何值。
for (int i = 1; i <= array.length; i++) {
array[i] = input.nextInt();
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
System.out.println("Enter array size: ");
int n = input.nextInt();
int [] array = new int[n];
System.out.println("Enter " + n + " elements:"); // <-- changed
for (int i = 0; i < array.length; i++) {
array[i] = input.nextInt();
}
int max_min[] = getMax_MinValue(array); // <- notice this.
System.out.println("Max Value: " + max_min[0]);
System.out.println("Min Value: " + max_min[1]);
} catch (InputMismatchException e) {
System.out.println("INVALID INPUT >> PLEASE INPUT A NUMBER");
}finally {
input.close(); // close the scanner
}
}
// return type changed
private static int[] getMax_MinValue(int[] array) {
int maxValue = array[0];
int minValue = array[0];
for (int i = 0; i < array.length; i++){
if (array[i] > maxValue){
maxValue = array[i];
}
if(array[i] < minValue) {
minValue = array[i];
}
}
int min_max[] = {maxValue,minValue}; // min_max[0] has max value and min_max[1] has min value
return min_max;
}
Enter array size:
8
Enter 8 elements:
5
23
9
14
45
36
42
39
Max Value: 45
Min Value: 5
private static int getMaxValue(int[] array) {
return IntStream.of(array).max().orElse(0);
}
private static int getMinValue(int[] array) {
return IntStream.of(array).min().orElse(0);
}