我试图在10个数字的数组中找到最大的数字。这是我的代码:
public static void getNumber() {
int NumbersArray[] = new int[11];
int num1;
int num2;
int largestNumber = 0;
Scanner scanner = new Scanner(System.in);
for(int i=1; i<11; i++){
System.out.println("Enter number " + i );
int no1 = scanner.nextInt();
NumbersArray[i] = no1;
}
scanner.close();
for(int i=1; i<11; i++)
{
System.out.println(NumbersArray[i]);
num1 = NumbersArray[i];
for(int j=10; j>0; j--)
{
num2 = NumbersArray[j];
if(num1>num2){
largestNumber = num1;
}
}
}
System.out.println("the largest number is " + largestNumber);
}
我发现了这个here真正简单的灵魂。
但我发布这个的原因是要找出我犯了什么错误。 第一部分从用户获得10个数字,第二部分是我的代码以找到最大数字。
答案 0 :(得分:1)
关闭Pshemo的建议,记录用户输入的最大int。这会将方法的大小减少一半,使其更简单,更易读。
使用基于0的索引进行编程。因此,请使用int NumbersArray[] = new int[10]
代替int NumbersArray[] = new int[11]
。当您声明阵列的大小时,只需输入所需的大小,您就不必担心索引或任何内容。对于for-loop,请从int i=0
开始,到i<10
结束。
public static void getNumber(){
int NumbersArray[] = new int[10];
int largestNumber = 0;
Scanner scanner = new Scanner(System.in);
for(int i=0; i<10; i++){
System.out.println("Enter number " + i );
int no1 = scanner.nextInt();
NumbersArray[i] = no1;
if(no1 > largestNumber)
largestNumber = no1;
}
scanner.close();
System.out.println("The largest number is: " + largestNumber);
}
答案 1 :(得分:1)
问题是你在列表中迭代两次(以嵌套的方式)。假设您有以下数字:[5, 7, 3, 4]
。当你第一次通过内循环时,你最终将数字与5进行比较。只有7更大,所以largestNumber
将被设置为7.然后你将再次通过,这次比较7。没有什么比7大,所以它将被遗弃。接下来你将与3进行比较。最后的比较是3比4,而且由于4比较大,你最终将largestNumber
设置为4,这是不正确的。
答案 2 :(得分:1)
这些行:
for(int i=1; i<11; i++)
{
System.out.println(NumbersArray[i]);
num1 = NumbersArray[i];
for(int j=10; j>0; j--)
{
num2 = NumbersArray[j];
if(num1>num2){
largestNumber = num1;
}
}
}
不要搜索数组中的最大数字,而只是在NumbersArray
中搜索任何大于当前元素的值。因此largestNumber
不是数组中的最大数字,而是NumbersArray
中的最后一个数字,大于NumbersArray
的最后一个数字,除非NumbersArray
的最后一个元素是最大的元素,在这种情况下,largestNumber
将是NumbersArray
中的最后一个值。
一个有效的解决方案是:
int max = Integer.MIN_VALUE;
for(int i : NumbersArray)
if(max < i)
max = i;
虽然最有效的解决方案是在读取输入时直接跟踪当前最大的输入。
请记住,java-arrays是 0-based 。这意味着第一个元素位于NumbersArray[0]
,而不是NumbersArray[1]
,就像您的代码一样。
答案 3 :(得分:0)
据我所知,您可以使用Java Math max()方法获取最大数量。 即:dataType max(int number1,int number2),Math.max(number1,number2)获得数字1和2之间的最大值。