Wątek przeniesiony 2022-11-24 13:59 z Java przez Riddle.

Aplikacja konsolowa licząca obwód i pole trójkąta

0

Bardzo Was proszę, z racji moich początków z Java o sprawdzenie, czy poniższy kod jest prawidłowy:

Napisz program, który pobierze od użytkownika trzy boki trójkąta, policzy jego obwód oraz pole i wypisze wynik na ekran.

import java.util.Scanner;
public class sprawdzian

{    public static void main(String[] args) {       
 int wynik;       
 int wynik2;        
Scanner kozak = new Scanner(System.in);       
System.out.println("Podaj 3 cyfry: ");        
System.out.println("a = ");        
int a = kozak.nextInt();        
System.out.println("b = ");        
int b = kozak.nextInt();        
System.out.println("c = ");        
int c = kozak.nextInt();        
System.out.println("h = ");        
int h = kozak.nextInt();   wynik = a+b+c;   
System.out.println("obwod trojkata to:  "  + wynik );   
wynik2 = a*h/2;       
 System.out.println("pole trojkata to:  "  + wynik2 );   
 }}

Będę wdzięczna za wszelkie informacje.

5
  1. sformatuj z właściwym syntaxem
  2. pora na odróżnianie cyfr od liczb, nie sądzisz ?
  3. nazwa kozak mozę czadowo do kumpli brzmi, ale jest wbrew dobrym praktykom
  4. obliczenia na liczbach całkowitych mogą być zaskakujące, zwłaszcza dzielenie
  5. Pobranie h od uzytkownika jest d/d - tzreba to obliczyć. Niestety ta zła matematyka się kłania ...
1

Oprócz tego nie ma żadnej obsługi wyjątków, co się stanie jak użytkownik wpisze coś co nie będzie dało się sparsować na int?
Dobrze byłoby też wydzielić do osobnych komponentów obliczenia i pobieranie danych

3
var napisał(a):

Oprócz tego nie ma żadnej obsługi wyjątków, co się stanie jak użytkownik wpisze coś co nie będzie dało się sparsować na int?
Dobrze byłoby też wydzielić do osobnych komponentów obliczenia i pobieranie danych

uzupełnię

a=5, b=5, c=5, h =100 (@Agnieszka_poczatkujaca narysuj taki trójkąt)

generalnie kabaret

0

Dziękuję bardzo za informację

2

Poza tym, że raczej miałaś obliczyć wysokość trójkąta na podstawie boków to chyba poprawne, ale nie dobre. Po pierwsze, nazwy powinny być znaczące, po drugie, dużo duplikacji kodu: zamiast oddzielnych zmiennych, lepiej przechować boki w tablicy i wczytywać w pętli. Poza tym, zamiast typu int, użyłbym double, żeby wspierać ułamki.
Samo zadanie tak naprawdę sprowadza się do obliczenia pola bez znajomości wysokości trójkąta. Za angielska wikipedią można użyć wzoru Herona(https://en.wikipedia.org/wiki/Triangle). Zatem propnuję taki kod (nie testowałem, bo nie mam jdk):

import java.util.Scanner;

public class Triangle {
    public static void main(String [] args) {
        Scanner s = new Scanner(System.in);
        double [] sides = new double[3];
        for(int i = 0; i < 3; i++) {
            sides[i] = s.nextDouble();
        }

        double perimeter = sides[0] + sides[1] + sides[2];
        double area = 0.25 * Math.sqrt((sides[0] + sides[1] - sides[2])
                                       *(sides[0] - sides[1] + sides[2])
                                       *(-sides[0]+ sides[1] + sides[2])
                                       *(sides[0]+sides[1] + sides[1]));

        System.out.println("Perimeter: " + primeter);
        System.out.println("Area: " + area);
    }
}

Natomiast, żeby w ogóle było fajnie, to zamiast wczytywać parametry ze standardowego wejścia, lepiej wczytywać z listy parametrów (args), chociaż jeśli nie wywołujesz z konsoli, może być niewygodnie.

0

Czemu tak nie tlumaczą w szkole...dzieki

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