2013-08-06 5 views
11

To jest moje pierwsze pytanie. Te 2 pytania dotyczące metody tworzenia znalazły się w quizie, który zrobiłem. Utwórz metodę, aby znaleźć promień, podwójne r. Zwróć tablicę i jej indeksy z tablicy okręgów 2d. Jeśli nie można znaleźć Double R, powrót {-1, -1}. **Znajdź i wyszukaj podwójne w tablicy i zwróć jej indeksy? Czy jest to metoda zamiany elementów tablicy?)

public int[] void findCircleWithRadius(Circle[][] circles, double r) { 

    for(int i = 0; i<circles.length-1; i++) { //search the row 
     for(int j = 0; j<circles[0].length; j++) { //search each column 
      Circle temp = circles[i][j]; 
      if(temp == r) r = temp; 
      else return "{-1,-1}"; 
     } 
    } 

    return circles.indexOf(r); 
} 

utworzyć metodę do wymiany koła, stosując metodę findCircleWithRadius.

public static void swapCircles(Circles[][] circles, double r1, double r2) { 

    Circle radius1 = r1.findCircleWithRadius(); 
    Circle radius2 = r2.findCircleWithRadius(); 
    Circle temp2 = radius2; 

    radius2 = radius1; 
    radius1 = temp2; 
} 
+0

Aby zdobyć przedstawicieli, zadawaj dobre pytania i udzielaj przydatnych odpowiedzi. Zacznij od przeczytania następujących sekcji pomocy: [Jak zadać dobre pytanie?] (Http://stackoverflow.com/help/how-to-ask), [Jak napisać dobrą odpowiedź?] (Http://przepełnienie stosu.com/help/how-to-answer) – artdanil

+0

Co kompilator mówi do tego kodu, szczególnie do tej instrukcji if? W jaki sposób obiekt Circle i double mogą być porównywane? I nawet jeśli było to możliwe: przeczytaj uważnie swój kod, ponieważ jeśli sprawdza on równość i mówi "jeśli są równi, przypisz drugi do pierwszego". Jaki to ma sens? – oddparity

+0

Przy okazji: Czy ktokolwiek wspomina dwuwymiarową tablicę w pytaniu? – oddparity

Odpowiedz

4

Kilka rzeczy do poprawienia w pierwszym przykładzie:

  1. Teraz j < circles[0].length oznacza, że ​​tylko jedna kolumna jest wyszukiwane: kolumnę 0. Będziesz chciał j < circles[i].length przeszukiwać każdą kolumnę po wierszu.

  2. if (temp == r) oznacza porównanie Circle i double. Nie jestem zaznajomiony z klasą kółek, ale uważam, że będziesz chciał zastąpić zamiast Circle temp = circles[i][j] przez double temp = circles[i][j].getRadius();.

  3. Chcesz wrócić, jak tylko znajdziesz pasujące Circle, więc masz trochę rzeczy do tyłu. W przypadku moich nowych wersji, if (temp == r) aktywuje teraz kod, jeśli znalazłeś właściwy promień. Oznacza to, że poniżej oświadczenia if, będziesz chciał return {i, j};. To zwróci bieżący okrąg (który ma prawidłowy promień).

  4. Ostatnie polecenie zostanie wywołane, jeśli żaden z testów promienia nie zwróci wartości true, więc jeśli masz return circles.indexOf(r);, będziesz potrzebować return {-1, -1};.

  5. Ponieważ tablice są 0 oparte, a mniej niż już oznacza jeden minus wartość, nie trzeba - 1 w i < circles.length - 1

Na drugim przykładzie:

Twoja metoda findCircleWithRadius ma dwa paramaters: a Circle[][] i double. Oznacza to, że musisz je podać. Utworzona metoda nie jest również wywoływana z podwójnego, więc nie można powiedzieć, że r1.findCircleWithRadius(); Dodatkowo musisz użyć int[], którą przechodzi findCircleWithRadius, aby uzyskać te Circle. Dlatego twoje pierwsze linie w swapCircles powinno być:

int[] rad1 = this.findCircleWithRadius(circles, r1); // Get the coordinates of the first circle by passing the 2D array, and the radius you're looking for. 
int[] rad2 = this.findCircleWithRadius(circles, r2); // Get the coordinates of the second circle by passing the 2D array, and the radius you're looking for. 

Circle radius1 = circles[rad1[0]][rad1[1]]; // Circle 1 is equal to the Circle in the array that has coordinates of the first index in the coordinates, and the second index of the coordinates. (circles[x, y]) 
Circle radius2 = circles[rad2[0]][rad2[1]]; // Circle 2 is equal to the Circle in the array that has coordinates of the first index in the coordinates, and the second index of the coordinates. (circles[x, y]) 

Podsumowując, ukończony kod z moimi wersjami będzie wyglądał następująco:

public int[] void findCircleWithRadius(Circle[][] circles, double r) { 

for(int i = 0; i < circles.length; i++) { //search the row 
    for(int j = 0; j < circles[i].length; j++) { //search each column 
     double temp = circles[i][j].getRadius(); 
     if(temp == r) 
     return {i, j}; 
    } 
} 
return {-1, -1}; 
} 

public static void swapCircles(Circles[][] circles, double r1, double r2) { 

int[] rad1 = this.findCircleWithRadius(circles, r1); 
int[] rad2 = this.findCircleWithRadius(circles, r2); 
Circle radius1 = circles[rad1[0]][rad1[1]]; 
Circle radius2 = circles[rad2[0]][rad2[1]]; 

Circle temp2 = radius2; 

radius2 = radius1; 
radius1 = temp2; 
} 

W przeciwnym razie, wszystko wygląda bardzo dobrze! Mam nadzieję, że dobrze się spisałeś w swoim quizie! Daj mi znać, jeśli masz więcej pytań na temat tego, co powiedziałem, więc mogę się upewnić, że rozumiesz to w pełni.

+0

Dziękuję Snickers. –

+0

Proszę przejrzeć, dodałem jeszcze kilka problemów i skompilowałem to wszystko na samym dole. Wiem, że nadal się uczysz, ale w przyszłości będziesz chciał dokładnie śledzić, co robi twój program, tworząc udawaną tablicę 2D i uruchamiając metody z promieniem próbki "lub podobnymi praktykami. – snickers10m

+0

Ponadto, jeśli zadowalam twoje pytanie, zaznacz moją odpowiedź jako zaakceptowaną, abyśmy nie otrzymywali duplikatów odpowiedzi. – snickers10m

Powiązane problemy