• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obliczanie odległości - java

VPS Starter Arubacloud
0 głosów
735 wizyt
pytanie zadane 26 października 2016 w Java przez littlerunaway Obywatel (1,790 p.)

            x     y

Karol 0,0 0,0
Ola 10,0 10,0
Ada 4,0 6,0
Piotr 5,0 11,0

Mając takie dane (liczby zapisane w dwóch listach double, jedna odpowiadająca za wartości x, druga y)(niekoniecznie muszą to być 4 osoby i nie koniecznie takie liczby, mogą być zmienne), w jaki sposób skonstruować pętle która policzy odległości pomiędzy każdą parą osób według wzoru?
 

1 odpowiedź

0 głosów
odpowiedź 26 października 2016 przez niezalogowany
edycja 30 sierpnia 2017
 
Najlepsza

To chyba 2 pętlami coś w tym stylu:

for(int i=0; i<liczba_punktow; i++)
{
	for(int j=i+1; j<liczba_punktow; j++)
	{		
        //...
	}
	
}

W miejscu gdzie trzy kropki możesz umieścić liczenie i wypisywanie na ekran. Punkt pierwszy ma indeks i-ty, a drugi ma j-ty. 

PS. W razie problemów pytaj :)

PS2. Pętla ma za zadanie liczyć wykonywać się dla każdej możliwej pary np jak masz 3 osoby to:

 -1 z 3
- 1 z 2
- 2 z 3
Dla czterech osób:
- 1 z 2
-  1 z 3
- 1 z 4
- 2 z 3
- 2 z 4
- 3 z 4
Tak by operacje się nie powtarzały.

komentarz 26 października 2016 przez littlerunaway Obywatel (1,790 p.)
	for (int i = 0; i < koordinater_liste_x.size(); i++) {

				for (int j = 0; j < koordinater_liste_y.size(); j++) {
					
					try {
					
					double avstand = Math.sqrt(Math.pow((koordinater_liste_x.get(i) - koordinater_liste_x.get(i+1)), 2)+ Math.pow((koordinater_liste_y.get(j)-koordinater_liste_y.get(j+1)), 2));
					System.out.println(avstand);
					}
					
					catch (IndexOutOfBoundsException feil) {
						
					}
				}

			}

 

Próbowałam tak, ale daje za dużo wyników

komentarz 26 października 2016 przez niezalogowany

wydaje mi się, że powinno to wyglądać tak:
 

 double avstand = Math.sqrt(Math.pow((koordinater_liste_x.get(i) - koordinater_liste_x.get(j)), 2)+ Math.pow((koordinater_liste_y.get(i)-koordinater_liste_y.get(j)), 2));

Brakuje jeszcze pierwiastka z tego wyrażenia. Pętla liczy dla wszystkich odległości... Ile masz osób w tabeli?

 

komentarz 26 października 2016 przez littlerunaway Obywatel (1,790 p.)
ok mam, j++ dodałam na końcu środkowej pętli
komentarz 26 października 2016 przez niezalogowany

Nie zauważyłem, że miałaś:

for (int j = 0; j < koordinater_liste_y.size(); j++)

A ja chciałem wcześniej coś takiego w wewnętrznej pętli:

for (int j = i+1; j < koordinater_liste_y.size(); j++)

 

komentarz 26 października 2016 przez littlerunaway Obywatel (1,790 p.)
Próbowałam obydwóch, j = i+1 daje jedynie trzy wyniki, mój sposób daje 6 ale są nieprawidłowe:(
komentarz 26 października 2016 przez niezalogowany
Podaj cały swój kod i sprawdzę go dokładniej :)
komentarz 26 października 2016 przez littlerunaway Obywatel (1,790 p.)
http://pastebin.com/NdMT0qr9 pewnie zagubisz się w tych wszystkich kosmicznych nazwach zmiennych :)
komentarz 26 października 2016 przez niezalogowany
edycja 30 sierpnia 2017

Wyskakują mi błędy, ale jestem pewien że program będzie działał prawidłowo gdy pętlę będą tak:

for (int i = 0; i < koordinater_liste_x.size(); i++) {
 
       for (int j = i+1; j < koordinater_liste_y.size(); j++) { // j = i+1
                   
                 
                   
              double avstand = Math.sqrt(Math.pow((koordinater_liste_x.get(i) - koordinater_liste_x.get(j)), 2) + Math.pow((koordinater_liste_y.get(i)-koordinater_liste_y.get(j)), 2));
              // zwroc uwage na iteracje, petle tak wybralem by liczyc odleglosc miedzy i punktem i j-tym ale tak by im później wartości nie zmieniać. (wewnątrz pętli)
     

             System.out.println(avstand);


//...
           
    }}

Sprawdź jakieś proste przypadki np 4 osoby (0,0), (1,0), (0,1), (1,1). Wszędzie powinno wyjść albo 1 albo 1,41 (łącznie 6 wyników).

komentarz 26 października 2016 przez littlerunaway Obywatel (1,790 p.)
Dziękuję :)
komentarz 26 października 2016 przez niezalogowany
Proszę :)

Podobne pytania

0 głosów
2 odpowiedzi 1,652 wizyt
pytanie zadane 16 marca 2017 w C i C++ przez Michał Sokołowski Nowicjusz (210 p.)
0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 29 stycznia 2019 w Java przez Kevalo Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 213 wizyt
pytanie zadane 9 maja 2018 w Java przez acero_m Początkujący (390 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...