在我深入研究之前,我对Android很新,我上个月刚开始学习Java。在尝试开发我的第一个简单的应用程序时,我遇到了麻烦。由于在线随机教程,大多数障碍都被跳了出来。我的代码非常有用。任何提示都表示赞赏。
上面的问题相当广泛,但这就是我想要做的事情:它本质上是一个血液酒精含量计算器/饮料管理员跟踪器。基本布局:http://i.imgur.com/JGuh7.jpg
底部的按钮只是常规按钮,而不是ImageButtons(有问题)以下是一个示例代码:
<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_marginRight="5dp"
android:background="@drawable/addbeer"/>
按钮和TextView都在main.xml中。
我在名为Global.java的类中定义了变量:
package com.dantoth.drinkingbuddy;
import android.app.Activity;
公共类全局扩展活动{
public static double StandardDrinks = 0;
public static double BeerOunces = 12;
public static double BeerPercentAlcohol = .05;
public static double BeerDrink = BeerOunces * BeerPercentAlcohol;
public static double BeerDrinkFinal = BeerDrink * 1.6666666;
public static double ShotOunces = 1.5;
public static double ShotPercentAlcohol = .4;
public static double ShotDrink = ShotOunces * ShotPercentAlcohol;
public static double ShotDrinkFinal = ShotDrink * 1.6666666;
public static double WineOunces = 5;
public static double WinePercentAlcohol = .12;
public static double WineDrink = WineOunces * WinePercentAlcohol;
public static double WineDrinkFinal = WineDrink * 1.6666666;
public static double OtherOunces;
public static double OtherPercentAlcohol;
public static double OtherDrink = OtherOunces * (OtherPercentAlcohol * .01);
public static double OtherDrinkFinal = OtherDrink * 1.6666666;
public static double GenderConstant = 7.5; //9 for female
public static double Weight = 180;
public static double TimeDrinking = 60;
public static double Hours = TimeDrinking / 60;
public static double Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);
}
最后一个变量是重要的部分。它根据所涉及的因素计算您的BAC。
当我按下添加啤酒按钮(Button01)时,我将它添加到StandardDrinks,模拟喝一杯啤酒。 Bac公式中的其他变量在Global.java中赋值给它们。
让啤酒按钮做的事的代码在我的常规课程中,drinkbuddy.java:
public class DrinkingBuddy extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Global.StandardDrinks = Global.StandardDrinks + Global.BeerDrinkFinal;
Toast.makeText(DrinkingBuddy.this, "Mmmm... Beer", Toast.LENGTH_SHORT).show();
}
});
根据我的看法,StandardDrinks现在应该具有值1.但是,当我单击Calculate BAC按钮(Button05)时,它仅输出变量Bac,就好像StandardDrinks仍然设置为0.以下是Calculate的代码BAC按钮(Button05):
按钮button4 =(按钮)findViewById(R.id.Button05); button4.setOnClickListener(new OnClickListener(){ @覆盖 public void onClick(查看v){
TextView texty;
texty = (TextView) findViewById(R.id.texty1);
texty.setText("Your BAC is " + Global.Bac );
}
});
它将以下内容输出到文本视图:“您的BAC是-0.017”。如果StandardDrinks仍为0,则这是Bac值,因此显然在类之间进行通信存在一些问题。任何人都可以帮助我吗?
公式的其他元素(体重,饮酒时间和酒精%等)是变量,因为我最终会允许用户在设置中更改这些值。
我听说水冷却器全局变量不是很好的编程风格,但这是我最接近它的工作方式。任何其他方式都非常受欢迎!
答案 0 :(得分:1)
关于编码风格和结构可能会有很长的响应,但我会跳过这一点并继续讨论前期问题。
仅仅因为更新变量的值并不意味着更新了该变量所发生的任何计算。在此上下文中,更改StandardDrinks
的值不会导致Bac
自动重新计算。具体来说,分配类静态成员变量值的代码在类设置期间运行一次,尽管我实际上并不确切知道dalvik VM何时执行此操作。每次StandardDrinks
更改值时,您需要重新计算Bac
。
答案 1 :(得分:1)
您的计划中存在一些逻辑错误。
public static double Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);
此变量Bac将使用公式的值进行初始化。除非您明确这样做,否则公式中用于计算BAC的变量的进一步变化将不会反映出来。我建议有一个更新BAC的功能如下
您可以在一次活动中完成上述所有操作。
public class DrinkingBuddy extends Activity {
/** Called when the activity is first created. */
double StandardDrinks = 0;
double BeerOunces = 12;
double BeerPercentAlcohol = .05;
double BeerDrink = BeerOunces * BeerPercentAlcohol;
double BeerDrinkFinal = BeerDrink * 1.6666666;
double ShotOunces = 1.5;
double ShotPercentAlcohol = .4;
double ShotDrink = ShotOunces * ShotPercentAlcohol;
double ShotDrinkFinal = ShotDrink * 1.6666666;
double WineOunces = 5;
double WinePercentAlcohol = .12;
double WineDrink = WineOunces * WinePercentAlcohol;
double WineDrinkFinal = WineDrink * 1.6666666;
double OtherOunces;
double OtherPercentAlcohol;
double OtherDrink = OtherOunces * (OtherPercentAlcohol * .01);
double OtherDrinkFinal = OtherDrink * 1.6666666;
double GenderConstant = 7.5; //9 for female
double Weight = 180;
double TimeDrinking = 60;
double Hours = TimeDrinking / 60;
double Bac;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
StandardDrinks = StandardDrinks + BeerDrinkFinal;
Toast.makeText(DrinkingBuddy.this, "Mmmm... Beer", Toast.LENGTH_SHORT).show();
}
});
Button button4 = (Button) findViewById(R.id.Button05);
button4.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
TextView texty;
Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);
texty = (TextView) findViewById(R.id.texty1);
texty.setText("Your BAC is " + Bac );
}
});
我的代码非常有用。
确实非常混乱。我很难删除所有不必要的公共和静态声明。这个document可能有助于编写java代码时遵循的约定。
根据该文件引用
变量应该在哪里初始化 他们被宣布,他们应该 在最小的范围内宣布 可能的。
希望它有助于朝着正确的方向发展。