2015-05-22 1 views
1

В моем коде я хочу отслеживать порядок нажатия кнопок с помощью массива (порядок - это имя массива), а затем каждый раз, когда нажата кнопка, эта кнопка будет записана внутри массив. Это будет сделано с помощью булевых кнопок для определенных кнопок, если нажата кнопка, логическое значение true и оттуда, если логическое значение true, оно установит следующее открытое пятно в массиве заказов к этому ключу. Вот как это делается до сих пор:Установка массива с циклом в Java

private boolean bird = false; 
private boolean ox = false; 
private boolean dog = false; 
String[] order = new String[10]; 

public void keyPressed(KeyEvent e){ 
    int key = e.getKeyCode(); 
    for(int i=0; i < handler.object.size(); i++){ 
     GameObject tempObject = handler.object.get(i); 
     if(tempObject.getId() == ID.Player){ 
     if(key == KeyEvent.VK_T) bird = true; 
     if(key == KeyEvent.VK_U) ox = true; 
     if(key == KeyEvent.VK_G) dog = true; 
     } 
} 
    public void order(){ 
     if(bird){ 
     for(int x=0; x < 10; x++){ 
      if(order[x] == null) order[x] = "bird"; 
      bird = false; 
     } 
    } 
     if(ox){ 
     for(int x=0; x < 10; x++){ 
      if(order[x] == null) order[x] = "ox"; 
      ox = false; 
     } 
    } 
     if(dog){ 
     for(int x=0; x < 10; x++){ 
      if(order[x] == null) order[x] = "dog"; 
      dog = false; 
     } 
    } 
} 

Пожалуйста, обратите внимание, что животные здесь представляют собой ключи

проблема здесь заключается в том, что, когда я проверить, что каждый индекс массива устанавливается в он дает мне только один из ключей. пример; i нажмите t, и все ордера (0,1,2) - птицы. Я знаю, что это потому, что код проходит через все заказы, чтобы увидеть, являются ли они нулями, которые в начале они есть, а затем устанавливает эти нулевые порядки в слово. После этого ни один из ордеров не равен нулю.
То, что я спрашиваю, как это сделать, чтобы цикл цикла останавливался после того, как он устанавливает один из индексов в слово? я попробовал «перерыв», но это не сработало, я тоже безнадежно смотрел в Интернете. Спасибо вам за помощь!

ответ

1

break - это путь выхода из цикла. Вы думали добавить скобки к if-заявлению? Кстати, вы можете переместить animal=false; строки из каждого для цикла:

if(dog){ 
    for(int x=0; x < 10; x++){ 
     if(order[x] == null) { 
      order[x] = "dog"; 
      break; 
     } 
    } 
    dog = false; 
} 

Но здесь чище способ сделать то, что вы хотите, не все для-петли:

int index = 0; 
String[] order = new String[10]; 

public void keyPressed(KeyEvent e){ 
    int key = e.getKeyCode(); 
    for(int i=0; i < handler.object.size(); i++){ 
     GameObject tempObject = handler.object.get(i); 
     if(tempObject.getId() == ID.Player){ 
      if(key == KeyEvent.VK_T) order[index++] = "bird"; 
      if(key == KeyEvent.VK_U) order[index++] = "ox"; 
      if(key == KeyEvent.VK_G) order[index++] = "dog"; 
     } 
    } 
} 

Или даже лучше, со списком, поэтому вы не ограничены 10 входами:

List<String> order = new ArrayList<String>(); 

public void keyPressed(KeyEvent e){ 
    int key = e.getKeyCode(); 
    for(GameObject tempObject : handler.object){ 
     if(tempObject.getId() == ID.Player){ 
      if(key == KeyEvent.VK_T) order.add("bird"); 
      if(key == KeyEvent.VK_U) order.add("ox"); 
      if(key == KeyEvent.VK_G) order.add("dog"); 
     } 
    } 
} 
+0

проблема с использованием разрыва; заключается в том, что он только позволяет установить первый порядок, используя ключ после этого не имеет значения. EDIT: хорошо, поэтому я играл с ним и ставил перерыв птицу и быка, но не собаку, и когда я это делаю, если я нажимаю птицу, первая - птица, если я нажимаю ox, ничего не происходит, и когда я нажимаю собаку второй и третий заказ стать собака. Я не знаю, почему это происходит, но мы думаем об этом. – GMagician

+0

Операторы 'break ;' должны быть заключены в квадратные скобки, если операторы, в которых вы меняете значение @GMagician, сейчас я не могу сказать, что это то, что вы сделали, но это поведение звучит странно. –

+0

'код', если (птица) { \t \t \t для (INT х = 0, х <10; х ++) { \t \t \t \t если (порядок [х] == NULL) порядок [х] = "птица" ; \t \t \t \t break; \t \t \t \t \t \t bird = false; \t \t} 'code' Я помещаю разрыв в {} после оператора if, и я думал, что это было странное поведение. EDIT: Спасибо, что так работает! – GMagician

Смежные вопросы