为什么在检查字符时控件不会进入if循环?

时间:2016-05-19 07:22:51

标签: java if-statement

我有这个程序,我必须从表达式中取两个数字和符号:

**111*369**

但是在这里:

for(i=0; i<t; i++) {
while(w) {
    if(ar1[i].charAt(j)=='+' || ar1[i].charAt(j)=='-' || ar1[i].charAt(j)=='*' || ar1[i].charAt(j)=='/') {
        w = false;
    }
    else {
        k = ar1[i].charAt(j);
        a = a*10 + (long)(k-48);
    }
}       

程序永远不会进入if语句。它进入了一个无限循环。

那为什么不检查符号呢?

以下是包含输出的完整程序的链接:My Program

2 个答案:

答案 0 :(得分:1)

你的while循环总是在条件中检查相同的字符,因为你永远不会增加<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/content24" android:id="@+id/step19textView" android:textSize="18dp" android:textAlignment="center" android:paddingRight="10dp" android:paddingLeft="10dp" android:paddingBottom="10dp" android:paddingTop="10dp" android:layout_marginTop="32dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <LinearLayout android:id="@+id/llParent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/step19textView" android:layout_marginTop="50dp" android:orientation="horizontal"> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" android:id="@+id/step19button1" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_weight="1" android:background="@drawable/button_border" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2" android:id="@+id/step19button2" android:layout_weight="1" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_alignTop="@+id/step19button1" android:layout_toRightOf="@+id/step19button1" android:layout_toEndOf="@+id/step19button1" android:background="@drawable/button_border"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3" android:layout_weight="1" android:id="@+id/step19button3" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_alignBottom="@+id/step19button2" android:layout_toRightOf="@+id/step19button2" android:layout_toEndOf="@+id/step19button2" android:background="@drawable/button_border"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="4" android:id="@+id/step19button4" android:textSize="13dp" android:layout_weight="1" android:layout_marginLeft="3dp" android:textColor="@android:color/white" android:layout_alignBottom="@+id/step19button3" android:layout_toRightOf="@+id/step19button3" android:layout_toEndOf="@+id/step19button3" android:background="@drawable/button_border_5"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5" android:id="@+id/step19button5" android:textSize="13dp" android:layout_weight="1" android:layout_marginLeft="3dp" android:layout_alignBottom="@+id/step19button4" android:layout_toRightOf="@+id/step19button4" android:layout_toEndOf="@+id/step19button4" android:background="@drawable/button_border"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6" android:id="@+id/step19button6" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_weight="1" android:layout_alignBottom="@+id/step19button5" android:layout_toRightOf="@+id/step19button5" android:layout_toEndOf="@+id/step19button5" android:background="@drawable/button_border"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="7" android:id="@+id/step19button7" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_weight="1" android:layout_alignBottom="@+id/step19button6" android:layout_toRightOf="@+id/step19button6" android:layout_toEndOf="@+id/step19button6" android:background="@drawable/button_border"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="8" android:layout_weight="1" android:id="@+id/step19button8" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_alignBottom="@+id/step19button7" android:layout_toRightOf="@+id/step19button7" android:layout_toEndOf="@+id/step19button7" android:background="@drawable/button_border"/> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="9" android:layout_weight="1" android:id="@+id/step19button9" android:textSize="13dp" android:layout_marginLeft="3dp" android:layout_alignBottom="@+id/step19button8" android:layout_toRightOf="@+id/step19button8" android:layout_toEndOf="@+id/step19button8" android:background="@drawable/button_border"/> </LinearLayout> <EditText android:layout_width="wrap_content" android:layout_height="20dp" android:id="@+id/step19editText" android:paddingLeft="10dp" android:layout_below="@+id/llParent" android:layout_alignLeft="@+id/llParent" android:layout_alignStart="@+id/llParent" android:layout_marginTop="20dp" /> <EditText android:layout_width="wrap_content" android:layout_height="20dp" android:id="@+id/step19editText2" android:layout_alignTop="@+id/step19editText" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="20dp" android:id="@+id/step19editText3" android:paddingRight="10dp" android:layout_alignTop="@+id/step19editText2" android:layout_alignRight="@+id/llParent" android:layout_alignEnd="@+id/llParent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/content25" android:id="@+id/step19textView2" android:textSize="18dp" android:paddingLeft="10dp" android:layout_alignTop="@+id/step19textView4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/content26" android:id="@+id/step19textView4" android:textSize="18dp" android:textAlignment="center" android:layout_alignTop="@+id/step19textView5" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/content27" android:id="@+id/step19textView5" android:textSize="18dp" android:paddingRight="10dp" android:layout_below="@+id/step19editText3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" Next " android:textSize="18dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:id="@+id/step19nextbutton" android:layout_marginTop="59dp" android:textColor="@android:color/white" android:background="@drawable/button_border_5" android:layout_below="@+id/step19textView4" android:layout_centerHorizontal="true" /> </RelativeLayout> 。因此,如果该字符不是运算符,则循环将永远不会终止。

您应该在每次迭代中增加j,并注意不要将j增加到最后一个索引j之后:

ar1[i]

答案 1 :(得分:1)

查看您的while声明:

while (w) {
    if (ar1[i].charAt(j) == '+' || ar1[i].charAt(j) == '-' || ar1[i].charAt(j) == '*' || ar1[i].charAt(j) == '/') {
        w = false;
    } else {
        k = ar1[i].charAt(j);
        a = a * 10 + (long)(k - 48);
    }
}

如果if条件为false,则转到else块。 else块无需更改w,也无需更改if正在测试的内容,因此循环将永远持续。