2016-11-26 4 views
0

Мне нужно написать некоторые методы для игры в java, и один из них - int [] findStone. Метод возвращает массив, который дает координату элемента, который я ищу.Найти массив позиций элемента в java

The field looks like this и определяется следующим образом: private static int[][] gamefield = new int[8][6]; Так что, если я использую метод: findStone (3) [0], она должна возвращать 0 для координаты х и findStone (3) 1, 2. Это код что я написал.

private static int[] findStone(int stone) { 

     int[] position = new int[2]; 

     for(int x = 0; x < 8; x++){ 
      for(int y = 0; y < 6; y++) { 

       int a = gamefield[x][y]; 
       int i = x; 
       int j = y; 

       if(a == stone) { 
        position[0] = i; 
        position[1] = j; 
       } 
       break; 
      } 
     } 
     return position; 

    } 

Проблема заключается в следующем: метод возвращает только координаты х для первой строки corectly, для других элементов он показывает мне 0. Может кто-нибудь объяснить мне, что я сделал неправильно, и что я должен изменить? Пожалуйста, только простое объяснение. Я только в начале, и у меня нет опыта в java. Спасибо :)

+1

потому что вы используете break для y loop, он просто запускается один раз. –

+0

Можете ли вы прояснить, что вы пытаетесь выполнить? –

+0

Помимо 'break' в неподходящем месте, вы также должны выйти из обеих петель одновременно или ваш код продолжает идти за оставшимися значениями x (что является по крайней мере пустой тратой циклов процессора): см. [Break with label] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html) (вторая половина этой страницы) или подумайте о том, чтобы «вернуть позицию» немедленно, а не нарушать. – zapl

ответ

0

Возможно, вы намеревались разместить свой break в блоке if. Теперь у вас это есть, ключевое слово break не влияет. Он просто разбивает внутренний цикл (с переменной y), но так как этот блок кода заканчивается здесь, он просто ничего не делает.

Вы ищете одну точку на своей карте, поэтому, когда вы находите каменную позицию, вы можете сразу ее вернуть, так как больше нечего делать.

Кроме того, вам не нужны дополнительные переменные, a, i и j. Использование их не так, но код выглядит более четким и более сжатым без них. Посмотрите на этот код:

private static int[] findStone(int stone) { 

    int[] position = new int[2]; 

    for (int x = 0; x < 8; x++) { 
     for (int y = 0; y < 6; y++) { 

      if (gamefield[x][y] == stone) { 
       position[0] = x; 
       position[1] = y; 

       return position; 
      } 
     } 
    } 
    return null; // if there's no given stone 
} 
+0

Теперь это работает. Спасибо <3 – Anna

+0

Удачи вам в написании игры! – misko321