#java #arrays #methods
#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];
}
}
}
}
Комментарии:
1. Подсказка: i-й разрыв можно найти с
list[i 1] - list[i]
помощью; запомните самый большой такой разрыв.
Ответ №1:
Используя 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