将字符串与2d字符串数组进行比较,仅比较数组的最后一个值

时间:2017-01-22 18:30:54

标签: java android

当我比较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");
                        }
                    }
                }
            }
        });
    }
}

1 个答案:

答案 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; }
}

但由于某种原因,我认为你已经知道了这一点;)