寻找数组的最大值
Finding Maximum Value of Array
我正在尝试遍历我的数组以找到最大值并打印该值。但是,没有任何内容被打印到控制台。你能看看我下面的代码,看看我做错了什么吗?
for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user
array[c] = in.nextInt();
maxInt = array[0];
minInt = array[0];
for (c = 0; c < n; c++) {
if (array[c] > maxInt) {
maxInt = array[c];
}
else {
break;
}
}
System.out.println("Max int is: " + maxInt);
}
编辑:
完整 class:
import java.util.Scanner;
public class MaxMinOfArray {
public static void main(String[] args) {
int c, n, search, array[];
int maxInt, minInt;
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt(); //asks user to specify array size
array = new int[n]; //creates array of specified array size
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user
array[c] = in.nextInt();
maxInt = array[0];
minInt = array[0];
for (c = 1; c < n; c++) {
if (array[c] > maxInt) {
maxInt = array[c];
}
}
System.out.println("Max int is: " + maxInt);
}
}
删除:
else {
break;
}
并从c=1
开始
正如其他人所说,您不想做
else {
break;
}
这意味着它会在找到不大于当前最大值的数字时立即停止循环。由于您是从列表中的第一项开始,它并不比自身大,因此您立即 break
。
即使您将其更改为从 c = 1
开始,此代码可能按编写的方式运行的唯一情况是用户按升序输入数字。 (在那种情况下,像这样进行线性搜索无论如何都是毫无意义的,因为您实际上可以找到数组中的最后一项,并且知道它将是最大的一项)。
此外,您应该检查 array[c]
是否小于 for
循环中的当前最小值;完全没有理由在单独的循环中执行此操作。
记住,如果您对未排序数组的最大值进行线性搜索,您总是必须遍历整个数组以确保您没有遗漏更大的价值。比如你只搜索了数组的一半,你怎么知道你没搜索到的那一半不是最大值?
删除你的这部分代码。
else {
break;
}
因为c==0
那时候array[c] == maxInt
。所以它转到 else 部分并打破你的 for
循环。
第二个循环比较 array
中的每个元素是否大于 maxInt
,但是 maxInt
刚刚设置为 array
的第一个元素。这在循环的第一次迭代中使条件失败,在 else 块中执行 break
,从而结束循环。
删除 else
块可以解决此问题:
for (c = 0; c < n; ++c)
{
if (array[c] > maxInt)
maxInt = array[c];
}
或者:
for (c = 0; c < n; ++c)
maxInt = Math.max(maxInt, array[c]);
至于没有出现控制台消息,请通过设置断点并单步执行代码(取决于您使用的IDE)确保代码正确执行。
我正在尝试遍历我的数组以找到最大值并打印该值。但是,没有任何内容被打印到控制台。你能看看我下面的代码,看看我做错了什么吗?
for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user
array[c] = in.nextInt();
maxInt = array[0];
minInt = array[0];
for (c = 0; c < n; c++) {
if (array[c] > maxInt) {
maxInt = array[c];
}
else {
break;
}
}
System.out.println("Max int is: " + maxInt);
}
编辑:
完整 class:
import java.util.Scanner;
public class MaxMinOfArray {
public static void main(String[] args) {
int c, n, search, array[];
int maxInt, minInt;
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt(); //asks user to specify array size
array = new int[n]; //creates array of specified array size
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user
array[c] = in.nextInt();
maxInt = array[0];
minInt = array[0];
for (c = 1; c < n; c++) {
if (array[c] > maxInt) {
maxInt = array[c];
}
}
System.out.println("Max int is: " + maxInt);
}
}
删除:
else {
break;
}
并从c=1
正如其他人所说,您不想做
else {
break;
}
这意味着它会在找到不大于当前最大值的数字时立即停止循环。由于您是从列表中的第一项开始,它并不比自身大,因此您立即 break
。
即使您将其更改为从 c = 1
开始,此代码可能按编写的方式运行的唯一情况是用户按升序输入数字。 (在那种情况下,像这样进行线性搜索无论如何都是毫无意义的,因为您实际上可以找到数组中的最后一项,并且知道它将是最大的一项)。
此外,您应该检查 array[c]
是否小于 for
循环中的当前最小值;完全没有理由在单独的循环中执行此操作。
记住,如果您对未排序数组的最大值进行线性搜索,您总是必须遍历整个数组以确保您没有遗漏更大的价值。比如你只搜索了数组的一半,你怎么知道你没搜索到的那一半不是最大值?
删除你的这部分代码。
else {
break;
}
因为c==0
那时候array[c] == maxInt
。所以它转到 else 部分并打破你的 for
循环。
第二个循环比较 array
中的每个元素是否大于 maxInt
,但是 maxInt
刚刚设置为 array
的第一个元素。这在循环的第一次迭代中使条件失败,在 else 块中执行 break
,从而结束循环。
删除 else
块可以解决此问题:
for (c = 0; c < n; ++c)
{
if (array[c] > maxInt)
maxInt = array[c];
}
或者:
for (c = 0; c < n; ++c)
maxInt = Math.max(maxInt, array[c]);
至于没有出现控制台消息,请通过设置断点并单步执行代码(取决于您使用的IDE)确保代码正确执行。