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

Obliczanie odległości - java

0 głosów
218 wizyt
pytanie zadane 26 października 2016 w Java przez littlerunaway Obywatel (1,800 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,800 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,800 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,800 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,800 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,800 p.)
Dziękuję :)
komentarz 26 października 2016 przez niezalogowany
Proszę :)

Podobne pytania

0 głosów
2 odpowiedzi 419 wizyt
pytanie zadane 16 marca 2017 w C i C++ przez Michał Sokołowski Nowicjusz (210 p.)
0 głosów
1 odpowiedź 81 wizyt
pytanie zadane 29 stycznia w Java przez Kevalo Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 73 wizyt
pytanie zadane 9 maja 2018 w Java przez acero_m Początkujący (390 p.)
Porady nie od parady
Forum posiada swój własny serwer Discord, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

67,127 zapytań

114,075 odpowiedzi

241,784 komentarzy

47,030 pasjonatów

Przeglądających: 226
Pasjonatów: 16 Gości: 210

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...