Roid:if();不要引起任何禁令

问题描述 投票:1回答:3

我看到了奇怪的情况:在我的Android应用程序代码中使用类似的东西时,我没有收到任何错误:

@Override
public void onBackPressed() {

        if (getActionBar().getSelectedTab().getPosition()==1)**;**
        {
            if ( getFragmentManager().findFragmentByTag("Tag B") instanceof ContactsArchiveFragment)
            {
                    final ContactsArchiveFragment fragment = (ContactsArchiveFragment) getFragmentManager().findFragmentByTag("Tag B");

                if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not

                    Log.i("calls act back cont archive", "on back clicked");
                    super.onBackPressed();
                }
            }

        }

}

当我尝试做这样的事情时:

    @Override
public void onBackPressed() {

        if (getActionBar().getSelectedTab().getPosition()==1);
        {
            if ( getFragmentManager().findFragmentByTag("Tag B") instanceof ContactsArchiveFragment)
            {
                    final ContactsArchiveFragment fragment = (ContactsArchiveFragment) getFragmentManager().findFragmentByTag("Tag B");

                if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not

                    Log.i("calls act back cont archive", "on back clicked");
                    super.onBackPressed();
                }
            }

        }
        else
        {

        }

}

我收到了qazxsw大便。当我看到半音时,我意识到问题是什么。但这让我很难过,有人能解释一下它是什么吗?

java android if-statement syntax
3个回答
4
投票

当你有这样的Syntax error on token "else", delete this token时:

if

应该与if(); { // Supposed to be with if } 一起使用的块现在只是一个独立于if的本地块。 if声明以分号结束。编译器不会将其标记为错误,因为它完全是有效的代码。

现在你的第二个案例:

if

请注意,if (); { } else { } 语句仅以分号结束,然后您有一个块。但是if不会在任何else之后出现,因为它需要来。所以,它真的是没有ifelse

这类似于在此代码中出现错误的情况:

if

就是这样,上面的情况在第一眼就很明显了。它就像:

if () {

} 
System.out.println("Hello");
else {  // Error. Which `if` block do you suppose else to be bound with?

}

可视化为:

if (); 

这相当于一个空的if() ; // Empty statement 块 - if


7
投票

但这让我很难过,有人能解释一下它是什么吗?

当然 - if() { }只是一个空洞的陈述,没有;的块也没关系。例如,这是有效的:

if

...而if (i == 0) System.out.println("i was 0"); System.out.println("In top-level block"); { System.out.println("In a block"); } 之后的分号恰好相当于第一个空体的if声明。

就个人而言,我总是使用大括号来表示if语句(以及if语句等)。某些编译器(例如Eclipse中内置的编译器)允许您在使用这样的空语句时发出警告或错误。

while形式无效,因为你只能将else子句作为else / if语句的一部分,而else语句已经在分号结尾处“完成”。


1
投票

一个额外的if造成这里的所有混乱。

那个分号在那里终止了;,并假设它是一个新的块,从那里开始。

如果你仔细观察

statement

这是一个声明,而不是If条件。

条件应该是

  if (getActionBar().getSelectedTab().getPosition()==1);  <----

删除额外的 if (getActionBar().getSelectedTab().getPosition()==1){ }

如果你看到与块有关的;

块是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何位置使用。以下示例BlockDemo说明了块的使用:

docs
© www.soinside.com 2019 - 2024. All rights reserved.