2017-01-22 385 views
0

當我比較demDigits.equals(Numbers [i] [j])時,if僅對於2d數組中的最後一個值是666, 111-555的其他值都是錯誤的。想不通爲什麼比較字符串與2d字符串數組,只比較數組的最後一個值

public class MainActivity extends AppCompatActivity { 

    EditText digits; 
    EditText console; 
    Button press; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final String[][] Numbers = { 
       {"111", "222"}, 
       {"333", "444"}, 
       {"555", "666"} 
     }; 
     digits = (EditText) findViewById(R.id.editText4); 
     console = (EditText) findViewById(R.id.editText5); 
     press = (Button) findViewById(R.id.button3); 
     press.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final String demDigits = digits.getText().toString(); 

       for (int i = 0; i < Numbers.length; i++) 
       { 
        for(int j = 0; j < Numbers[i].length; j++) 
        { 

         if (demDigits.equals(Numbers[i][j])) 
         { 
          console.setText("works"); 
          //break; 
         } 
         else 
         { 
          console.setText("nope"); 
         } 
        } 
       } 
      } 
     }); 
    } 
} 
+0

如果'break'該循環您只打破了內環內。不知道這是你想要的,但你可以使用[標籤循環](http://stackoverflow.com/q/3821827/7366707)來突破外部循環。 – Moira

+0

這就是評論,我試圖停止循環時,等於是真實的,但沒有幫助。不需要休息解決方案。 – magetogi

+0

我正在談論的事實是,你並沒有用這個break語句停止整個循環。 – Moira

回答

0

你可能會得到比你討價還價從digits.getText()方法@Ekundayo他已經發布的代碼的註釋中指出。檢查它,你應該得到的3字符串長度,以作出適當的對比:

final String demDigits = digits.getText().toString(); 

// Read LogCat to see output with method below 
// or use whatever you want to display desired 
// output. 
Log.d("demDigits", "demDigits Length = " + demDigits.length()); 

這是從來沒有修剪的用戶輸入,因爲額外的空間是方便用戶到輸入過程中應用是一件壞事。對於一些人來說,這是一個徹頭徹尾的習慣。作爲@Ekundayo已經提出:

final String demDigits = digits.getText().toString().trim(); 

應該對這一問題的關心。

既然你有你的代碼中的註釋休息聲明它自然地假設你想擺脫你的循環的一次成功的作了比較。這是完全有道理的,因爲除非你真的想要,否則進一步處理是浪費時間。作爲@ 1blustone已經在他的評論中指出,要正確地分出內外對於循環,你將需要多於一個中斷聲明,你需要每個循環一個。這裏是你如何能做到這一點:

final String demDigits = digits.getText().toString().trim(); 

for (int i = 0; i < Numbers.length; i++) { 
    boolean mustBreak = false; 
    for(int j = 0; j < Numbers[i].length; j++) { 
     if (demDigits.equals(Numbers[i][j])) { 
      console.setText("works"); 
      mustBreak = true; 
      break; 
     } 
     else { 
      console.setText("nope"); 
     } 
    } 
    if (mustBreak) { break; } 
} 

但由於某些原因,我想你已經知道這一點;)

+0

感謝您解釋和解決我的問題。 – magetogi