2015-05-22 32 views
1

在我的代碼中,我想跟蹤使用數組按下按鈕的順序(順序是數組名稱),然後每次按下按鈕時該按鈕將被記錄在裏面陣列。這將通過對某些按鈕進行布爾值操作來完成,如果按下按鈕,則布爾值爲true;如果布爾值爲true,則從那裏開始,它會將order array中的下一個開放點設置爲該鍵。下面是它迄今所做的:使用for循環在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; 
     } 
    } 
} 

請注意,這些動物在這裏代表的按鍵

這裏的問題是,當我檢查,看看有什麼陣列的每個指標設置爲它只給我一個鍵。 例子;我按t,所有的訂單(0,1,2)都是鳥。我知道這是因爲代碼遍歷所有的命令,看看它們是否在開始時是空的,然後它將這些空命令設置爲該單詞。之後,沒有任何訂單是空的。
我在問什麼是如何讓for循環停止後,它設置索引的一個單詞?我嘗試了'休息',但沒有奏效,我也在網上無望地看了一眼。感謝您的幫助!

回答

1

break是退出for循環的方式。您是否想爲if語句添加括號?順便說一句,你可以移動animal=false;線條勾勒出的每一個for循環:

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

但這裏是做你想做的更清潔的方式,沒有所有的for循環:

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

使用break的問題;它只是讓第一個訂單被設置,使用一個關鍵碼後沒有什麼區別。編輯:沒關係,所以我玩弄了它,並把破碎的鳥和牛,但不是狗,當我這樣做,如果我按鳥第一個是鳥,如果我按牛沒有發生,當我按狗第二和第三訂單成爲狗。我不知道爲什麼會發生這種情況,但認爲id分享。 – GMagician

+0

如果你現在更改@GMagician的值,現在我不能說出你做了什麼,但是這種行爲聽起來很奇怪,那麼'break;'語句應該放在括號內。 –

+0

'代碼' 如果(鳥){ \t \t \t對(INT X = 0; X <10; X ++){ \t \t \t \t如果(順序[X] == NULL)順序[X] = 「鳥」 ; \t \t \t \t break; \t \t \t} \t \t \t bird = false; \t \t}'code'我在if語句後面放置了{},並且我認爲這也是奇怪的行爲。編輯:謝謝你的方式工作! – GMagician