1

我正在尝试做两件事中的一件。如果我所有的 EditText 都输入了一些长度> 0 的数据,那么它应该进入我的数学方程并将数据放入 EditText dispMinPmt。如果 EditText 字段有 NULL 值,它应该在最后做 Toast。目前,两者都没有发生。也没有要显示的错误。

这是我的.java:

@SuppressLint("ShowToast")
public void ButtonOnClick(View v)
{
    TextView dispMinPmt = (TextView)findViewById(R.id.dispMinPmt); 
    Intent intent = new Intent(this, MainActivity.class);

    switch (v.getId()) {
    case R.id.calculate1:
        Toast.makeText(getApplicationContext(), "Check 1", Toast.LENGTH_SHORT).show();

        EditText nickname = (EditText) findViewById(R.id.editNickname);
        if (nickname.getText().toString().length()>0)
        {
            String debtNickname = nickname.getText().toString();
            EditText origBal = (EditText) findViewById(R.id.editOrigBal);
            if (origBal.getText().toString().length()>0)
            {
                String myOrigBal = origBal.getText().toString();
                Double originalBalance = Double.parseDouble(myOrigBal);

                EditText myAPR = (EditText) findViewById(R.id.editAPR);
                if (myAPR.getText().toString().length()>0)
                {
                    String myEditValue2 = myAPR.getText().toString();
                    Double apr = Double.parseDouble(myEditValue2);

                    EditText myOrigTerm = (EditText) findViewById(R.id.editOrigTerm);
                    if (myOrigTerm.getText().toString().length()>0)
                    {
                        String myEditValue3 = myOrigTerm.getText().toString();
                        Double originalTerm = Double.parseDouble(myEditValue3);

                        double r = apr/1200;
                        double r1 = Math.pow(r+1,originalTerm);

                        Double minPmt = (double) ((r+(r/(r1-1))) * originalBalance);
                        DecimalFormat df = new DecimalFormat("#.##");      
                        minPmt = Double.valueOf(df.format(minPmt));

                        dispMinPmt.setText("" + String.valueOf(minPmt) + "Mo.");

                    }
                }
            }
        }
        else
        {
            Toast.makeText(getApplicationContext(), "Please complete all fields", Toast.LENGTH_SHORT).show();
        }
        break;
    }
}

这是我的布局(.xml)

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".DebtInput" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textNickname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Debt Nickname" />

    <EditText
        android:id="@+id/editNickname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="text"
        android:text="Car Loan"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</TableRow>

<TableRow
    android:id="@+id/tableRow2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textOrigBal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Original Balance" />

    <EditText
        android:id="@+id/editOrigBal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="10000.00"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</TableRow>

<TableRow
    android:id="@+id/tableRow3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textAPR"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="APR (%)" />

    <EditText
        android:id="@+id/editAPR"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="0.00"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</TableRow>

<TableRow
    android:id="@+id/tableRow4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textOrigTerm"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Loan Term (Months)" />

    <EditText
        android:id="@+id/editOrigTerm"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="number"
        android:text="60"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</TableRow>

<TableRow
    android:id="@+id/tableRow5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textOutBal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Outstanding Balance" />

    <EditText
        android:id="@+id/editOutBal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="1000.00"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</TableRow>

<TableRow
    android:id="@+id/calcButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/calculate1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="Calculate" />
</TableRow>

<TableRow
    android:id="@+id/tableRow6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textMinPmt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Minimum Payment" />

    <TextView
        android:id="@+id/dispMinPmt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceSmall" />
</TableRow>

<TableRow
    android:id="@+id/tableRow7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textAddPmt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Additional Payment" />

    <EditText
        android:id="@+id/editAddPmt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="100.00"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</TableRow>

<TableRow
    android:id="@+id/calcButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/calculate2"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="Calculate" />
</TableRow>

<TableRow
    android:id="@+id/tableRow8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textNewPmt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="New Payment" />

    <TextView
        android:id="@+id/dispNewPmt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceSmall" />
</TableRow>

<TableRow
    android:id="@+id/buttons"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/add"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="Add" />

    <Button
        android:id="@+id/clear"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="Clear" />

</TableRow>

4

6 回答 6

2

您的 IF 语句过度嵌套。这是一个不好的做法。此外,只有在不满足第一个条件时才会触发 else 语句。如果不满足任何后续条件,则不会发生任何事情。

我可以自由地整理您的代码:

public void ButtonOnClick(View v)
    {
        TextView dispMinPmt = (TextView)findViewById(R.id.dispMinPmt); 
        Intent intent = new Intent(this, MainActivity.class);

        switch (v.getId()) {
        case R.id.calculate1:
            Toast.makeText(getApplicationContext(), "Check 1", Toast.LENGTH_SHORT).show();

            EditText nickname = (EditText) findViewById(R.id.editNickname);
            EditText origBal = (EditText) findViewById(R.id.editOrigBal);
            EditText myAPR = (EditText) findViewById(R.id.editAPR);
            EditText myOrigTerm = (EditText) findViewById(R.id.editOrigTerm);

            String nicknameStr = nickname.getText().toString();
            String origBalStr = origBal.getText().toString();
            String myAPRStr = myAPR.getText().toString();
            String myOrigTermStr = myOrigTerm.getText().toString();

            double origTermValue;
            boolean origTermIsParsable;

            try
            {
                origTermValue = Double.parseDouble(origBalStr);
                origTermIsParsable = true;
            }
            catch (NumberFormatException  e) 
            {
                origTermIsParsable = false;
            }

            if (nicknameStr.length() > 0 && origBalStr.length() > 0 && myAPRStr.length() > 0 && myOrigTermStr.length() > 0 && origTermIsParsable)
            {               
                Double originalTerm = origTermValue;

                double r = apr/1200;
                double r1 = Math.pow(r+1,originalTerm);

                Double minPmt = (double) ((r+(r/(r1-1))) * originalBalance);
                DecimalFormat df = new DecimalFormat("#.##");      
                minPmt = Double.valueOf(df.format(minPmt));

                dispMinPmt.setText("" + String.valueOf(minPmt) + "Mo.");

            }
            else
            {
                Toast.makeText(getApplicationContext(), "Please complete all fields", Toast.LENGTH_SHORT).show();
            }
            break;
        }
    }

一般来说,在彼此内部嵌套这么多 IF 是您应该始终尽量避免的事情。如果您有两个 if 一个在另一个中,请消除其中一个,并将条件与“AND”语句结合起来。

希望这可以帮助 :)

于 2013-10-06T06:18:39.033 回答
1

您的问题是您正在尝试使用比较字符串>,但这是行不通的。你要么需要把它变成int; 或者,您需要使用该equals方法来比较字符串。使用equals您将无法使用大于或小于。

于 2013-10-06T05:19:32.800 回答
0

尝试添加trim() 它将删除所有包含的空格,如下所示

nickname.getText().toString().trim().length()>0

还要将此行放在您的 onCreate 方法中

 TextView dispMinPmt = (TextView)findViewById(R.id.dispMinPmt); 
于 2013-10-06T05:26:47.957 回答
0
int value = 0;
value= Integer.parseInt(edittext.getText().toString());

并检查 value>0 。

这是检查您的编辑文本数据何时是整数值而不是字符串的情况。

于 2013-10-06T05:28:51.917 回答
0
android:onClick="ButtonOnClick" is missing from the XML
于 2013-10-06T06:11:14.903 回答
0

尝试使用该StringUtils.isEmpty(nicknameStr)方法,而不是nicknameStr.length > 0.

于 2013-10-06T10:42:20.220 回答