簡體   English   中英

嘗試暫時停止使用代碼“ break()”進行下一個活動。 為什么不起作用?

[英]Trying to stop going to the next activity in a while with the code “break()”. Why doesn't this work?

我試圖阻止用戶,如果輸入低於18,則轉到下一個活動。 我嘗試通過“ break()”語句來嘗試此操作。 不起作用 在大多數情況下,它甚至崩潰了。 我是Java新手,如果能很好地解釋您給出的新代碼,將不勝感激。

謝謝你的幫助。

碼:

public class AirPortActivity extends AppCompatActivity {

    private EditText nameTextView;
    private EditText inputNumberAge;

    private Button nextActivityButton;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.optionsButton:
            break;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_air_port);

        nameTextView = (EditText)findViewById(R.id.nameeditText);
        inputNumberAge = (EditText)findViewById(R.id.inputNumberAge);

        nextActivityButton = (Button) findViewById(R.id.nextActivityButton);

        nextActivityButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               int number = 18;
               int parsedInt = Integer.parseInt(inputNumberAge.getText().toString());
               int numberoferror = 18;

              while (parsedInt < numberoferror) {
                  break;
              }

              String nameOfUser = nameTextView.getText().toString();
              int numberAge = 18;

              startStory(nameOfUser);
              String nameOfUserToast = "Hi " + nameOfUser;
              Toast.makeText(AirPortActivity.this, nameOfUserToast, Toast.LENGTH_SHORT).show();
          }

      });
  };

  private void startStory(String nameOfUser) {
      Intent intent = new Intent(this, AirPortSetup.class);
      startActivity(intent);
  }
}
while (parsedInt < numberoferror) {
  break;
}

這將立即退出,不執行任何操作,或者進入一個永不退出的無限循環。 我也不是你想要的。 如果您不想在parsedInt <18時執行其余功能,則需要:

if(parsedInt < numberoferror) {
    return;
}

你的意思是

switch (item.getItemId()) {
    case R.id.optionsButton:
        return false; // or maybe true?
}

所有的break操作都是退出switch塊,這將是一個空語句。 return立即退出功能。

同樣, while (parsedInt < numberoferror) { break;}將永遠循環,或在第一次迭代時退出。 您是否應該使用if語句,而不是使用break再次return

如果要停止用戶進行下一個活動,則需要像這樣實現onClickListener

nextActivityButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       int number = 18;
       int parsedInt = Integer.parseInt(inputNumberAge.getText().toString());
       int numberoferror = 18;

      if (parsedInt < numberoferror) {
          return;
      }

      String nameOfUser = nameTextView.getText().toString();
      int numberAge = 18;

      startStory(nameOfUser);
      String nameOfUserToast = "Hi " + nameOfUser;
      Toast.makeText(AirPortActivity.this, nameOfUserToast, Toast.LENGTH_SHORT).show();
   }
});

因為如果parsedInt大於numberoferror ,則循環永遠不會被執行,如果numberoferror是大於parsedInt則循環將運行無限次。

您需要用if語句替換while循環。

問題是您的控制流程。 休息是一種方法,但是使用條件更容易理解。 如果滿足條件,那么您將轉到下一個活動,否則您必須將其告知用戶,否則就不要移動。

另一個問題是,由於格式不正確,在Java中解析數字可能會崩潰,請在該操作中使用try / catch進行修復

nextActivityButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               String inputValue = inputNumberAge.getText().toString();
               try {
                  final int limit = 18;
                  int userNumber = Integer.parseInt(inputValue);
                  if (limit >= userNumber) {
                     //HERE GO TO NEXT ACTIVITY
                  }
               } catch (NumberFormatException e) {
                  //TOAST
               }
          }

      });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM