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

Obliczanie odległości - java

Object Storage Arubacloud
0 głosów
740 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,673 wizyt
pytanie zadane 16 marca 2017 w C i C++ przez Michał Sokołowski Nowicjusz (210 p.)
0 głosów
1 odpowiedź 202 wizyt
pytanie zadane 29 stycznia 2019 w Java przez Kevalo Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 214 wizyt
pytanie zadane 9 maja 2018 w Java przez acero_m Początkujący (390 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...