当我比较demDigits.equals(Numbers [i] [j])时,if仅在2d数组中的最后一个值为666时为真,而111-555中的每个其他值都为假。无法弄清楚原因
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 :(得分:0)
由于 @Ekundayo 已在其发布的代码的评论中指出,您可能会从 digits.getText()方法获得的收益超过您的讨价还价。检查一下,你应该得到一个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 循环。这是完全有道理的,因为除非你当然想要,否则进一步处理会浪费时间。正如 @ 1blustone 已经在他的评论中指出的那样,为了正确地突破内部和外部的 for 循环,你将需要不止一个中断< / strong>声明,每个循环你需要一个。以下是如何实现这一目标:
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; }
}
但由于某种原因,我认为你已经知道了这一点;)