2017-01-22 115 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