Metoda wyszukująca max wartości tablicy

1

Cześć mam problem z pewnym zadaniem.

Przejdź do MaxMethodklasy i zaimplementuj maxmetodę.

Poprawna implementacja powinna otrzymać tablicę intwartości i zwrócić jej maksymalną wartość.

Detale:

Tablica wejściowa na pewno nie jest pustą tablicą ani null.
Metoda nie może modyfikować tablicy.
Tablica wejściowa może zawierać dowolną intwartość pomiędzy Integer.MIN_VALUEi Integer.MAX_VALUE.
Przykład:
int[] vals = new int[]{ -2, 0, 10, 5 };
int result = MaxMethod.max(vals);
System.out.println(result == 10); // true

public class MaxMethod {
    public static int max(int[] values) {
        throw new UnsupportedOperationException();
        
        int i;
        int max = vals[0];

        for (i = 1; i < vals.length; i++)
            if (vals[i] > max)
                max = vals[i];
        return max;
    }
    public static void main(String[] args)
    {
        int[] vals = new int[]{-4, -3, -3, -10, -2, -145};
        int result = MaxMethod.max(vals);
        System.out.println("Najwieksza jest:  " + result);
    }
}

co robię niepoprawnie?

1

W linii 6 tworzysz nową, pustą tablicę, w której próbujesz znaleźć maksymalną wartość, a nie wykorzystujesz wcale parametru tej metody values

2

Ten kod się nawet nie skompiluje.

int max = vals[0];
  1. Nie masz w swojej metodzie max(int[] values) czegoś takiego jak vals
  2. Po co to: throw new UnsupportedOperationException()? Nawet jak poprawisz nazewnictwo tablicy to nie pójdzie dalej bo na starcie rzucasz zbędny wyjątek
0

Okej czyli nawet w przypadku takiej poprawki:

public class MaxMethod {
    public static int max(int[] values) {
        throw new UnsupportedOperationException();

        int i;
        int max = values[0];

        for (i = 1; i < values.length; i++)
            if (values[i] > max)
                max = values[i];
        return max;
    }
    public static void main(String[] args)
    {
        int[] values = new int[]{-4, -3, -3, -10, -2, -145};
        int result = MaxMethod.max(values);
        System.out.println("Najwieksza jest:  " + result);
    }
}

Jest to bez sensu bo nie ma prawa działać?
Ja to rozumiem tak: Muszę zrobić klasę w której będzie metoda wyszukująca najwyższą wartość. psvm (linijka 15, 16) będzie automatycznie zmieniane przez test i będzie oczekiwało poprawnego wyniku. Nie radzę sobie z tym.

0

Przykładowo w teście do sprawdzenia będą:

int[] values = new int[]{-4, -3, -3, -10, -2, -145};
        int result = MaxMethod.max(values);
        assertEquals(-2, result);

        int[] values = new int[]{-10, 3, 255528, 0, Integer.MAX_VALUE, 100, 0};
        int result = MaxMethod.max(values);
        assertEquals(Integer.MAX_VALUE, result);

        int[] values = new int[]{-794, -206, -500, -410, -850, -249, -968, -536, -61, -65, -866};
        int result = MaxMethod.max(values);
        assertEquals(-61, result);

        itd.

I ta metoda ma pobierać sobie wartości i wyrzucać oczekiwane poprawne

@kixe52: Po co to: throw new UnsupportedOperationException()? Szczerze nie wiem w template było i nie wiem czy mam to wyrzucić czy test sobie coś sprawdza z tego

1

Jakie IDE do Javy używasz? bo każde normalne od razu Ci powie jak wygląda stan Twojego kodu.
Wskazówkę masz w punkcie 2 mojego poprzedniego posta.

3

Możesz to zapisać w jednej linijce:

return Arrays.toStream(values).max();

Mała uwaga: co ma być zwrócone dla pustej tablicy?

Odnośnie tego wyjątku - to chyba jakiś żart? :)

0

@kixe52: Używam IntelliJ i wyrzuca błędy kompilator. Chciałbym zrozumieć działanie, logikę tego co tutaj się dzieje a w książce, którą mam Rusz głową -Java. jest to opisane pobieżnie.

0

@Charles_Ray: Jestem na etapie niżej niż początkujący i nie potrafię jeszcze używać takich skróconych zapisów. I nie odnośnie żadnego wyjątku to nie żart :(

1

Ale przecież dałem Ci już odpowiedź.

kixe52 napisał(a):
  1. Po co to: throw new UnsupportedOperationException()? Nawet jak poprawisz nazewnictwo tablicy to nie pójdzie dalej bo na starcie rzucasz zbędny wyjątek
1

Wywal tę linię z wyjątkiem. Ta linia kończy działanie tego programu, prawdopodobnie została ci po jakimś autogenerowaniu, albo przepisałeś coś bez zrozumienia.

0

Okej, działa. Dzięki wielkie za pomoc!

1

Warto abyś zdał sobie sprawę gdzie robiłeś błąd.

  1. W 3 linijce rzucałeś wyjątek (UnsupportedOperationException()) zupełnie niepotrzebnie co kończyło działanie aplikacji (poczytaj o wyjątkach: link)
  2. Wewnątrz metody MaxMethod posługiwałeś się zmienną o nazwie vals (linia 6, 8, 9, 10) mimo, że w w linii 2 zadeklarowałeś zmienną pod nazwą values

1 użytkowników online, w tym zalogowanych: 0, gości: 1