Android 与旋转器操作混淆

Android 与旋转器操作混淆,android,Android,我正在做一些计算,旋转器是我使用的东西之一 这是我能做的最好的事情: public class Price1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.price1

我正在做一些计算,旋转器是我使用的东西之一

这是我能做的最好的事情:

public class Price1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.price1);

    int price1 = getIntent().getExtras().getInt("theprice");

    int price2 = calculateprice2(price1);

    TextView tvprice1 = (TextView) findViewById(R.id.price1text2);
    tvprice1.setText(String.valueOf(price2));
}

private int calculateprice2(int price1) {
    Spinner sp1 = (Spinner) findViewById(R.id.spinner1);

    if (sp1.getSelectedItemPosition() == 1) {
        return (int) (price1 - (price1 / 10));
    } else if (sp1.getSelectedItemPosition() == 2) {
        return (int) (price1 - (price1 / 5));
    } else if (sp1.getSelectedItemPosition() == 3) {
        return (int) (price1 - ((price1 * 3) / 10));
    } else if (sp1.getSelectedItemPosition() == 4) {
        return (int) (price1 - ((price1 * 33) / 100));
    }

}
阅读代码。我想你会理解我的目标的(我希望你能理解,因为当你的英语非常糟糕的时候,很难解释:-)

问题是我在“calculateprice2(int price2)”中遇到了这个错误: “此方法必须返回int类型的结果”

我知道我的错误很愚蠢,但我找不到它


谢谢。

要修复编译错误,
calculateprice2()
如果
条件不匹配,则不会返回任何内容。在这种情况下,您可能需要返回一些合理的默认值,例如添加

return 0;
在方法的末尾

要使其按您可能希望的方式运行,请注意以下几点:

  • 项目位置从索引0开始,而不是从1开始

  • onCreate()
    仅在创建活动时运行。要在更改选择时运行该方法,请查看
    setOnItemSelectedListener()

    • 你喜欢这样吗-

      private int calculateprice2(float price20) {
          Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
          Integer price1 = getIntent().getExtras().getInt("theprice");
          if (sp1.getSelectedItemPosition() == 1) {
              return (int) (price1 - (price1 / 10));
          } else if (sp1.getSelectedItemPosition() == 2) {
              return (int) (price1 - (price1 / 5));
          } else if (sp1.getSelectedItemPosition() == 3) {
              return (int) (price1 - ((price1 * 3) / 10));
          } else if (sp1.getSelectedItemPosition() == 4) {
              return (int) (price1 - ((price1 * 33) / 100));
          }
          else {
              return 0;
          }
      }
      


      calculateprice2()函数的末尾。您可以看到,您的函数并非在所有情况下都返回值。

      如果没有更正任何
      if/else
      语句,则应提供默认返回值。例如,您可以声明一个
      retVal
      变量:

      private int calculateprice2(int price1) {
          Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
          int retVal = 0;
          if (sp1.getSelectedItemPosition() == 1) {
              return (int) (price1 - (price1 / 10));
          } else if (sp1.getSelectedItemPosition() == 2) {
              return (int) (price1 - (price1 / 5));
          } else if (sp1.getSelectedItemPosition() == 3) {
              return (int) (price1 - ((price1 * 3) / 10));
          } else if (sp1.getSelectedItemPosition() == 4) {
              return (int) (price1 - ((price1 * 33) / 100));
          }
          return retVal;
      
      }
      

      在这种情况下,我将始终在TextView中获得0。在这种情况下,我将始终在TextView中获得0。如果上述条件均不满足,则为是。在这种情况下,我将始终在TextView中获得0。在这种情况下,我将始终在TextView中获得0。这可能是因为作为参数发送的price1中的值无效。添加其他内容与此无关!请检查getIntent().getExtras().getInt(“价格”)是否发送了正确的值。还可以查看spinner是否有4个以上的选项。抱歉,我在语法中没有看到任何问题。在没有匹配的情况下返回0,0是int。哦,天哪,我看起来太傻了。很抱歉我已经改正了,谢谢提醒。
      private int calculateprice2(int price1) {
          Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
          int retVal = 0;
          if (sp1.getSelectedItemPosition() == 1) {
              return (int) (price1 - (price1 / 10));
          } else if (sp1.getSelectedItemPosition() == 2) {
              return (int) (price1 - (price1 / 5));
          } else if (sp1.getSelectedItemPosition() == 3) {
              return (int) (price1 - ((price1 * 3) / 10));
          } else if (sp1.getSelectedItemPosition() == 4) {
              return (int) (price1 - ((price1 * 33) / 100));
          }
          return retVal;
      
      }