首页 > 解决方案 > 查找数组Java中连续数字之间的最大差距

问题描述

我目前正在做家庭作业,作业的最后一项任务是编写一种方法来查找未排序数组中连续数字之间的最大间隙。示例:如果数组具有值 {1,2,3,4,5,20},则间隙将为 15。目前,该数组包含 20 个随机生成的值。

我完全不知道我将如何做到这一点。最初,我如何解决这个问题的想法是使用一个 for 循环,该循环遍历数组的每个值,内部还有另一个循环来检查当前值是否等于前一个值加 1。如果是,则将该数字存储为范围内的最小值。我遇到的另一个问题是我不知道如何在不覆盖范围内的两个数字的情况下存储第二个数字。基本上,我尝试过的任何事情都没有奏效,并且可以真正使用一些帮助或至少朝正确的方向轻推。

该方法现在所做的只是在找到数组中不连续的数字后才存储“a”的值。

这是我到目前为止的代码

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    Main m = new Main();
    m.runCode();
  }

  public void runCode()
  {
    Calculator calc = new Calculator();

    calc.makeList(20);

    System.out.println("List:");
    calc.showList();

    System.out.println("Max is: " + calc.max());
    System.out.println("Min is: " + calc.min());
    System.out.println("Sum is: " + calc.sum());
  System.out.println("Ave is: " + calc.average());
  System.out.println("There are " + calc.fiftyLess() + " values in the list that are less than 50");
  System.out.println("Even numbers: " + calc.Even());
  }
}

class Calculator {

  int list[] = new int[20];

  public void makeList(int listSize)
  {
    for (int count = 0; count < list.length; count++) {
      list[count] = (int) (Math.random() * 100);
    }
  }

  public void showList()
  {
    for (int count = 0; count < list.length; count++) 
    {
      System.out.print(list[count] + " ");
    }
  }

public int max()
{
  int max = list[0];
  for (int count=0; count<list.length; count++){
     if (list[count] > max) {
        max = list[count];
     }
  }
  return max;
}

public int min()
{
  int min = list[0];
  for (int count=0; count<list.length; count++){
     if (list[count] < min) {
       min = list[count];
     }
  }
  return min;
 }

 public int sum()
 {
   int sum = 0;
   for (int count=0; count<list.length; count++){
     sum = sum + list[count];
   }
   return sum;
 }

 public double average()
 {
   int sum = sum();
   double average = sum / list.length;
   return average;
 }

 public int fiftyLess()
 {
   int lessThan = 0;
   for (int count =0; count<list.length;count++)
   {
     if (list[count] < 50)
     {
       lessThan++;
     }

   }

   return lessThan;

    

 }

 public int Even()
 {
   int isEven = 0;

   for (int count = 0; count<list.length;count++)
   {
     if (list[count] % 2 == 0)
     {
       isEven++;

     }
   }

   return isEven;
 }

 public int Gap()
 {

  int a = 0;
  int b = 0;
  int gap = math.abs(a - b);
   for (int count = 1; count<list.length;count++)
   {
     if (list[count] != list[count] + 1)
     {
      a =list[count];


     }
   }
 }
}

标签: javaarraysmethods

解决方案


通过使用该java8 stream库,您可以用更少的代码行来实现这一点。

此代码段迭代数组的范围,并减去所有连续的数字,并返回它们之间的最大差值或-1,以防数组为空。

import java.util.stream.IntStream;

class Main {
    public static void main(String[] args) {
        int[] list = {1, 2, 3, 4, 5, 20};
        int max_difference =
                IntStream.range(0, list.length - 1)
                        .map(i -> Math.abs(list[i + 1] - list[i]))
                        .max().orElse(-1);
        System.out.println(max_difference);
    }
}

或者,您可以使用传统的 for 循环来执行此操作。

class Main {
    public static void main(String[] args) {
        int[] list = {1, 2, 3, 4, 5, 20};
        int max_difference = -1;
        int difference;

        for (int i = 0; i < list.length - 1; i++) {
            difference = Math.abs(list[i + 1] - list[i]);
            if(difference > max_difference)
                max_difference = difference;
        }
        System.out.println(max_difference);
    }
}

两个代码段的输出:

15

推荐阅读