在比较 demDigits.equals(Numbers[i][j]) 时如果只有真正是 666 二维数组中的最后一个值,从 111 555 的每个值为 false。不能找出原因
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");
}
}
}
}
});
}
}
你可能会遇到更多比你从你的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();
应该照顾这一问题。
因为你在你的代码中有注释的中断语句自然假定你想要打破你的for循环,一旦取得了成功的比较。这使得总感觉,因为它是一种浪费的 time
到 process
任何进一步的除非当然你其实想要的。正如@1blustone在他的评论,适当地打破这两个内部和外部的循环内已经指出你会需要超过一个break语句,你需要一个 for each 循环。这里是如何你可以实现这一点︰
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; }
}
但由于某些原因,我认为你已经知道这个;)