Java Android Eclipse计算菜单价格应用程序崩溃的成本

Java Android Eclipse计算菜单价格应用程序崩溃的成本,java,android,xml,eclipse,calculator,Java,Android,Xml,Eclipse,Calculator,我是一名新手程序员,在大学课程中已经使用Eclipse大约3个月了。我正在尝试制作一个简化的计算器,它将计算菜单价格成本,并返回菜单价格和成本百分比的理想值。程序说没有错误,但如果我通过编程学到了什么,那对我来说这并不意味着蹲着。当应用程序运行时,我可以很好地输入数字,我的“清除”按钮工作正常,但当我单击“计算”按钮时,我会收到一条错误消息,说明应用程序已崩溃 下面是我的mainactivity.java文件: package edu.niagara.cis.coveringcostsbeta;

我是一名新手程序员,在大学课程中已经使用Eclipse大约3个月了。我正在尝试制作一个简化的计算器,它将计算菜单价格成本,并返回菜单价格和成本百分比的理想值。程序说没有错误,但如果我通过编程学到了什么,那对我来说这并不意味着蹲着。当应用程序运行时,我可以很好地输入数字,我的“清除”按钮工作正常,但当我单击“计算”按钮时,我会收到一条错误消息,说明应用程序已崩溃

下面是我的mainactivity.java文件:

package edu.niagara.cis.coveringcostsbeta;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {

EditText m1, m2, m3, m4;
TextView sum1, sum2, sum3;

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

    m1 = (EditText) findViewById(R.id.price);
    m2 = (EditText) findViewById(R.id.recipe);
    m3 = (EditText) findViewById(R.id.portion);
    m4 = (EditText) findViewById(R.id.costBudget);

    sum1 = (TextView) findViewById(R.id.costPortion);
    sum2 = (TextView) findViewById(R.id.idealPrice);
    sum3 = (TextView) findViewById(R.id.costActual);
}

public void goCalculate(View v) {
    String str_m1 = m1.getText().toString();
    String str_m2 = m2.getText().toString();
    String str_m3 = m3.getText().toString();
    String str_m4 = m4.getText().toString();
    if (str_m1.equals(""))
        str_m1 = "0";
    if (str_m2.equals(""))
        str_m2 = "0";
    if (str_m3.equals(""))
        str_m3 = "0";
    if (str_m4.equals(""))
        str_m4 = "0";

    int i_m1 = Integer.parseInt(str_m1);
    int i_m2 = Integer.parseInt(str_m2);
    int i_m3 = Integer.parseInt(str_m3);
    int i_m4 = Integer.parseInt(str_m4);

    long l_sum1 = (long) (i_m2 / i_m3);
    long l_sum2 = (long) ((i_m2 / i_m3) / i_m4);
    long l_sum3 = (long) (l_sum1 / i_m1);

    String str_sum1 = Long.toString(l_sum1);
    sum1.setText(str_sum1);
    String str_sum2 = Long.toString(l_sum2);
    sum2.setText(str_sum2);
    String str_sum3 = Long.toString(l_sum3);
    sum3.setText(str_sum3);
}

public void goClear(View v) {
    m1.setText("");
    m2.setText("");
    m3.setText("");
    m4.setText("");
    sum1.setText("Cost Per Portion");
    sum2.setText("Ideal Price");
    sum3.setText("Food Cost Actual");
}
}
和我的mainactivity.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText 
        android:id="@+id/price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="My Menu Price"
        android:ems="10" >
    </EditText>

    <EditText
        android:id="@+id/recipe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="My Recipe Cost"
        android:ems="10" >
    </EditText>

    <EditText
        android:id="@+id/portion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="# of Portions"
        android:ems="10">
    </EditText>

    <EditText
        android:id="@+id/costBudget"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="Food Cost Budget %"
        android:ems="10">
    </EditText>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

     <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="goCalculate"
        android:text="Calculate" />
      <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="goClear"
        android:text="Clear" />

</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> 
<TextView
        android:id="@+id/costPortion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cost Per Portion"
        android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
        android:id="@+id/idealPrice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ideal Price"
        android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
        android:id="@+id/costActual"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Food Cost Actual"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>


</LinearLayout>
LogCat也没有多大帮助,唯一弹出的消息是: E-1设备断开连接:1 我也尝试过清理程序并再次运行,但这并没有改变任何事情

我很乐意发布任何其他信息,如果它有助于使更多的意义。我非常感谢所有的帮助/批评

-乔

这是实际的日志,抱歉弄错了

04-07 14:39:46.971: D/dalvikvm(1704): Not late-enabling CheckJNI (already on)
04-07 14:39:50.981: D/(1704): HostConnection::get() New Host Connection established 0xb8062d20, tid 1704
04-07 14:39:51.081: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:39:51.111: D/OpenGLRenderer(1704): Enabling debug mode 0
04-07 14:40:02.001: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:03.961: D/dalvikvm(1704): GC_FOR_ALLOC freed 146K, 7% free 3091K/3308K, paused 25ms, total 32ms
04-07 14:40:10.411: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:14.152: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:19.062: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:27.232: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:29.772: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:30.752: W/EGL_emulation(1704): eglSurfaceAttrib not implemented
04-07 14:40:32.762: D/dalvikvm(1704): GC_FOR_ALLOC freed 421K, 14% free 3184K/3676K, paused 27ms, total 43ms
04-07 14:40:37.252: D/AndroidRuntime(1704): Shutting down VM
04-07 14:40:37.252: W/dalvikvm(1704): threadid=1: thread exiting with uncaught exception (group=0xb2cf2b20)
04-07 14:40:37.262: E/AndroidRuntime(1704): FATAL EXCEPTION: main
04-07 14:40:37.262: E/AndroidRuntime(1704): Process: edu.niagara.cis.coveringcostsbeta, PID: 1704
04-07 14:40:37.262: E/AndroidRuntime(1704): java.lang.IllegalStateException: Could not execute method of the activity
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.view.View$1.onClick(View.java:3823)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.view.View.performClick(View.java:4438)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.view.View$PerformClick.run(View.java:18422)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.os.Handler.handleCallback(Handler.java:733)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.os.Handler.dispatchMessage(Handler.java:95)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.os.Looper.loop(Looper.java:136)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.reflect.Method.invokeNative(Native Method)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.reflect.Method.invoke(Method.java:515)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at dalvik.system.NativeStart.main(Native Method)
04-07 14:40:37.262: E/AndroidRuntime(1704): Caused by: java.lang.reflect.InvocationTargetException
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.reflect.Method.invokeNative(Native Method)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.reflect.Method.invoke(Method.java:515)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at android.view.View$1.onClick(View.java:3818)
04-07 14:40:37.262: E/AndroidRuntime(1704):     ... 11 more
04-07 14:40:37.262: E/AndroidRuntime(1704): Caused by: java.lang.NumberFormatException: Invalid int: "9.00"
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.Integer.invalidInt(Integer.java:137)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.Integer.parse(Integer.java:374)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.Integer.parseInt(Integer.java:365)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at java.lang.Integer.parseInt(Integer.java:331)
04-07 14:40:37.262: E/AndroidRuntime(1704):     at edu.niagara.cis.coveringcostsbeta.MainActivity.goCalculate(MainActivity.java:43)
04-07 14:40:37.262: E/AndroidRuntime(1704):     ... 14 more

问题似乎从这里开始:

04-07 14:40:37.262: E/AndroidRuntime(1704):     at edu.niagara.cis.coveringcostsbeta.MainActivity.goCalculate(MainActivity.java:43)
这是哪行代码?

根据这行代码

java.lang.NumberFormatException: Invalid int: "9.00"
您试图在第43行将浮点转换为整数

edu.niagara.cis.coveringcostsbeta.MainActivity.goCalculate(MainActivity.java:43)
你应该设置

android:inputType="number"

连接到编辑文本。

1)为什么断开连接,是否已插入?2) 只需运行您的代码并获得一些结果,当按钮单击时不会崩溃。你输入了什么数字?我立刻想到的一件事是,如果计算分母中的值为零,你就不会采取任何预防措施来除以零。原因:java.lang.NumberFormatException:Invalid int:“9.00”-你输入的带点的值9无法解析。对不起,我应该在之前说,我实际上是通过一个模拟器来运行它的。当我运行应用程序时,我对第一个条使用了9.00,对第二个条使用了3.21,分别使用了1和.35(我从最初计算的excel文件中使用了这一点)@jgrenga使用例如,float I_m1=float.parseFloat(str_m1)等等来计算所有价格。你是对的,我在编写代码时忘记了float,Onik和schippi也发现了这一点。我将整数切换为浮点数,应用程序成功运行。谢谢大家对我的帮助!
android:inputType="number"