java-在数组中找不到五个最低值…max可以工作,而min数组未分配值
作者:互联网
我非常接近完成此操作,我所需要的只是通过使用数组从文本文件中找到五个最低值的帮助.我想出了如何找到五个最高值,但是我找到最小值的min数组始终输出五个0.
输出://显然取决于单个文本文件
文本文件中的总数为10
总和是:1832
1775 14 9 9 7 //最大
0 0 0 0 0 //分钟
任何帮助深表感谢!
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]);
}
}
解决方法:
尝试通过在嵌套的min循环内输入以下代码来调试代码:
System.out.println("the value of numbers[i] is: " + numbers[i]);
所以看起来像这样:
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])
{
System.out.println("the value of numbers[i] is: " + numbers[i]);
temp = numbers[i];
numbers[i] = min[j];
min[j] = temp;
}
}
}
您会发现一些有趣的事情.最里面的嵌套部分甚至没有开始.
尝试将那条线放到其相应位置的嵌套max循环中…,它将正常运行并显示最大数组值.您正在为min数组获取零值,因为(除了初始分配之外)嵌套min循环的最内层部分没有以某种方式启动,因此它无法运行,并且搜索到的值未分配给min数组.
如果尝试用类似的行调试它们,则min循环的外部嵌套部分运行良好.这是不会开始的部分,并且出现了问题:
if (numbers[i] < min[j])
{
System.out.println("the value of numbers[i] is: " + numbers[i]);
temp = numbers[i];
numbers[i] = min[j];
min[j] = temp;
}
(更新)
在最小循环中,完成最大循环后,从i = 0到i = 4的数字[i]的值为0.
您只需要添加一行并在最小循环内使用int i = 5而不是int i = 0:
for (int j=0; j < 5; j++) //finds five lowest...array not assigned values
{
min[j] = max[4]; // added line
for (int i=5; i < numbers.length; i++) // change to int i=5
{
if (numbers[i] < min[j])
{...
标签:arrays,java,highest 来源: https://codeday.me/bug/20191121/2049456.html