java在数组中找不到五个最低值。。。最大值在最小数组未赋值时工作
我很快就要完成了,我所需要的只是通过使用数组从文本文件中找到五个最低值的帮助。我知道如何找到五个最高值,但我的最小数组找到最低值总是输出五个0
输出://显然取决于单个文本文件
文本文件中的数字总数为10
总数为:1832
17751497//max
0//min
非常感谢您的帮助
import java.util.Scanner;
import java.io.*;
public class HW3
{
public static void main(String[] args) throws IOException
{
File f = new File("integers.txt");
Scanner fr = new Scanner(f);
int sum = 0;
int count = 0;
int[] max = new int[5];
int[] min = new int[5];
int temp;
while(fr.hasNextInt())
{
count++;
fr.nextInt();
}
Scanner fr2 = new Scanner(new File("integers.txt"));
int numbers[] = new int[count];
for(int i=0;i<count;i++)
{
numbers[i]=fr2.nextInt(); //fills array with the integers
}
for(int j:numbers)//get sum
{
sum+=j;
}
for (int j=0; j < 5; j++) //finds five highest
{
for (int i=0; i < numbers.length; i++)
{
if (numbers[i] > max[j])
{
temp = numbers[i];
numbers[i] = max[j];
max[j] = temp;
}
}
}
for (int j=0; j < 5; j++) //finds five lowest...array not assigned values
{
for (int i=0; i < numbers.length; i++)
{
if (numbers[i] < min[j])
{
temp = numbers[i];
numbers[i] = min[j];
min[j] = temp;
}
}
}
System.out.println("Total amount of numbers in text file is " + count);
System.out.println("Sum is: " + sum);
System.out.println(max[0] + " " + max[1] + " " + max[2] + " " + max[3] + " " + max[4]);
System.out.println(min[0] + " " + min[1] + " " + min[2] + " " + min[3] + " " + min[4]);
}
}
# 1 楼答案
您的最小数组将被初始化为零值。所以数字中的值总是更高(假设没有负数)
我建议在内部循环之前用数字[0]初始化min[j]
# 2 楼答案
你有两个问题。 首先由汤姆·艾略特解释
第二个问题是max[]数组也是用0初始化的,当您搜索max值时,您将max数组中的值(即0)更改为numbers数组中的值,因此numbers数组将被0填充
一个快速解决方法(虽然不是最好的)是将数字数组复制到临时数组中,并在搜索最小值时使用该临时数组
如果您没有完全理解我说的话,请在找到5个最大值后尝试打印数字数组
# 3 楼答案
通过在嵌套的最小循环中输入以下行,尝试调试代码:
看起来是这样的:
你会注意到一些有趣的事情。最里面的嵌套零件甚至没有开始
尝试将该行放入相应位置的嵌套max循环中。。。它将正常运行并显示最大数组值。因为(初始分配除外)嵌套的min循环的最内层没有启动,所以它无法运行,并且搜索的值没有分配给min数组,所以min数组的值为零
如果尝试使用类似的行调试min循环的外部嵌套部分,则它们运行良好。这部分无法启动,并且出现了一些问题:
(更新) 在最小循环中,在完成最大循环后,从i=0到i=4的数字[i]的值为0
您只需添加一行,并在min循环中使用int i=5而不是int i=0:
# 4 楼答案
我只是好奇,你能不能直接排序(使用快速排序)选择前五名和后五名? -如果你能使用排序,我想这应该可以
# 5 楼答案
正如另一个答案所述,您的问题是没有考虑从0开始的数组。在Java中,它为该数据结构设置默认值。对于基本体,这通常为0或false。但是,当您进入数据结构时,如果无法初始化对象,则会出现空指针异常问题。出于这个原因,我敦促您养成在使用数据结构之前在数据结构中设置值的习惯。这将在将来为您节省大量调试时间
如果您事先知道这些值,可以使用{0,0,0,0,0}符号手动设置它们,也可以使用for循环进行初始化:
我建议您也考虑尽可能多地进行整合。例如,在代码中,您对相同的数据进行了4次检查:
1)将文件中的整数读入整数数组
2)对整数数组中的所有数字求和
3)寻找max
4)寻找min
我不确定您是否已经介绍了函数,但整合函数的一个示例可能如下所示:
然后定义这些函数并将肉放在其他地方。这使您只需要担心一个地方的循环