почему этот метод не возвращает истину? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующая задача: написать метод, который получает массив в качестве параметра и целое число.метод возвращает истину, если между двумя числами в массиве есть различие, которое больше, чем значение числовой переменной.обратите внимание, что вы можете зациклить массив только один раз.поэтому я написал:

public class difference
{
    public boolean difference(int[] a, int x)
    {
        int firstNum=a[0];//3
        boolean answer=false;
        for (int i=1;i<a.length;i++)
        {
            if (Math.abs(firstNum)-(Math.abs(a[i]))>Math.abs(x)) {
                answer=true;  
                break;  
            }
        }
        return answer;
    }
    public static void main(String[]args)
    {
        difference test= new difference();
        int[] array={3,4,6};
        System.out.println(test.difference(array,0));
    }
}

но по какой-то причине это выводит меня на экран, а не истина почему?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Ваша программа не является решением проблемы.Существует, по крайней мере, два решения: первое - O (n ^ 2), для которого нужно иметь два цикла for, чтобы сравнивать все элементы между собой.Второе решение, которое вы должны использовать, и проблема заставляет вас выбирать, потому что он говорит, что вы можете зациклить массив только один раз, это найти в одном цикле for минимум и максимум массива и контролировать их разность.Если их разница больше указанного числа, верните true, иначе false.

0 голосов
/ 05 февраля 2019

Math.abs(firstNum)-(Math.abs(a[i])

должно быть

Math.abs(firstNum - a[i])

Вы должны получить abs разницы, а не каждое число.

Но то, что вы делаете, это abs(3) - abs(4) = -1, что меньше 0. (аналогично для остальных)

[...], если есть разница между 2 числами вмассив, в котором его разность больше значения числовой переменной

Но вы сравниваете только первое число друг с другом ...

Если вам нужно найти, существуют ли два числачтобы разница между ними была больше, чем переданное целое число, найдите минимальное и максимальное значения и найдите разницу между ними (спасибо @NeplatnyUdaj за исправление)

...