编程语言
首页 > 编程语言> > java-在数组中找不到五个最低值…max可以工作,而min数组未分配值

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