Jak poszeregować liczby od największej do najmniejszej?

0

Witam, chciałem prosić o pomoc w rozwiązaniu takiego zadania w Javie:

Napisz metodę, która jako argument przyjmie trzy liczby. Metoda powinna zwrócić true jeśli z odcinków o długości przekazanych w argumentach można zbudować trójkąt prostokątny.

Wydaje mi się, że rozchodzi się o to, żeby użyć twierdzenie Pitagorasa dla sprawdzenia jak się ma przeciwprostokątna do przyprostokątnych. Zakładając, że ktoś kto będzie wpisywał długości boków, może je sobie wpisać w dowolnej kolejności, wydaje mi się, że początek kodu powinien wyglądać następująco:

import java.util.Scanner;

public class TrojkatProstokatny {

    public static void main (String[]args){
    int liczba1, liczba2, liczba3;

Scanner pobierzLiczbe1 = new Scanner(System.in);
Scanner pobierzLiczbe2 = new Scanner(System.in);
Scanner pobierzLiczbe3 = new Scanner(System.in);

liczba1 = pobierzLiczbe1.nextInt();
liczba2 = pobierzLiczbe2.nextInt();
liczba3 = pobierzLiczbe3.nextInt();

Nie mam pojęcia natomiast co dalej. Czy wpisywać to do tablicy, a jeśli tak, to co dalej z tym robić. Czy jest może jakaś metoda, która odnajdzie mi z trzech liczb tą największą, najmniejszą i jeszcze jakieś po środku, tak żeby potem je przypisać do innych zmiennych i wykonać na nich działania?

Jeśli ktoś ma chwilę czasu, to byłbym wdzięczny za pomoc.

0

W Javie do sortowania służy Collections.sort(), ale Tobie potrzebne jest po prostu maksimum, czyli (zagnieżdżone) Math.max(). Zagnieżdżone, bo max przyjmuje dwa argumenty, a Ty masz trzy, czyli potrzebujesz zrobić coś w stylu przeciwprostokątna = max(max(a, b), c).

0

Jeśli liczby mają być intami to można tak

static boolean rightTriangle(int a, int b, int c) {
    List<Integer> t = Arrays.asList(a, b, c);
    Collections.sort(t);        
    return t.get(0) * t.get(0) + t. get(1) * t.get(1) - t.get(2) * t.get(2) == 0;
}

public static void main(String args[])
{
    Scanner s = new Scanner(System.in);
    System.out.println(rightTriangle(s.nextInt(), s.nextInt(), s.nextInt()));
}
0

Hehe, jakoś rok temu wrzuciłem takie zadanie na stronie :)

Przykładowe rozwiązanie możesz zobaczyć na githubie

0

Proszę bardzo, profesjonalne rozwiązanie:


// --------------------------------------------------------------------------
import java.util.Arrays;

public class Trojkat {
    double dlugA, dlugB, dlugC;

    Trojkat(double dlugA, double dlugB, double dlugC) {
        this.dlugA = dlugA;
        this.dlugB = dlugB;
        this.dlugC = dlugC;
    }

    public boolean czyTrojkat() {
        double[] dlugosci = new double[3];
        dlugosci[0] = dlugA;
        dlugosci[1] = dlugB;
        dlugosci[2] = dlugC;

        Arrays.sort(dlugosci);

        if (dlugosci[2] < (dlugosci[0] + dlugosci[1])) {
            return true;
        } else {
            return false;
        }
    }

}

// --------------------------------------------------------------------------
import java.util.Arrays;
import java.lang.Math;

public class TrojkatProstokatny extends Trojkat {

    TrojkatProstokatny(double dlugA, double dlugB, double dlugC) {

        super(dlugA, dlugB, dlugC);
    }

    public boolean czyTrojkatProstokatny() {
        double a, b;
        double[] dlugosci = new double[3];
        dlugosci[0] = Math.pow(dlugA, 2);
        dlugosci[1] = Math.pow(dlugB, 2);
        dlugosci[2] = Math.pow(dlugC, 2);

        Arrays.sort(dlugosci);

        a = (double) Math.round(dlugosci[2] * 100000d) / 100000d;  // zaokraglam do 5 miejsca po przecinku
        b = (double) Math.round((dlugosci[0] + dlugosci[1]) * 100000d) / 100000d;  //zaokraglam do 5 miejsca po przecinku

        if (a == b) {
            return true;
        } else {
            return false;
        }
    }

}

// --------------------------------------------------------------------------
public class JedziemyZKoksem {

    public static void main(String[] args) {

        TrojkatProstokatny t = new TrojkatProstokatny(2,2, Math.sqrt(8));
        System.out.println(t.czyTrojkatProstokatny());
    }

}

rozwiązanie w R:


# ---------------------------------------------
czy3Prost <- function(x){

  if(length(x) != 3){
    stop("trojkat ma 3 odcinki");
  }

  sort(x) -> x

  x^2 -> x

  if(round(x[3],2) == round(x[2] + x[1],2)){
    T
  }else{
    F
  }

}

# --- przyklad -------------------------------
czy3Prost(c(2,2,sqrt(8)))
0

OK. Dzięki wszystkim za pomoc, ale zajmie mi pewnie sporo czasu, przeanalizowanie wszystkiego krok po kroku, czemu to tak, a nie inaczej działa. Póki co chciałem zapytać jeszcze czemu to nie działa. Przyszło mi to chyba tuż po napisaniu posta:

import java.util.Scanner;

public class TrojkatProstokatny {

    public static void main (String[]args){
    int liczba1, liczba2, liczba3;

Scanner pobierzLiczbe1 = new Scanner(System.in);
Scanner pobierzLiczbe2 = new Scanner(System.in);
Scanner pobierzLiczbe3 = new Scanner(System.in);

liczba1 = pobierzLiczbe1.nextInt();
liczba2 = pobierzLiczbe2.nextInt();
liczba3 = pobierzLiczbe3.nextInt();

boolean prostokatny = Math.sqrt(liczba1) + Math.sqrt(liczba2) == Math.sqrt(liczba3) ||
Math.sqrt(liczba1) + Math.sqrt(liczba3) == Math.sqrt(liczba2) ||
Math.sqrt(liczba2) + Math.sqrt(liczba3) == Math.sqrt(liczba1);

if (prostokatny == true)

    System.out.println("To jest trójkąt prostokątny");

    else

        System.out.println("To nie jest trójkąt prostokątny");

}
}

Wydaje mi się że operator || jest właściwy, ale przy każdym działaniu wychodzi mi, że trójkąt nie jest prostokątny.

1

Math.sqrt liczy pierwiastek kwadratowy, nie drugą potęgę. Na razie Ty sprawdzasz, czy \sqrt{a} +\sqrt{b} = \sqrt{c}, a powinieneś czy a^2 + b^2 = c^2.

0

Fakt, teraz działa. Dzięki bardzo.

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