2010-06-06 6 views
1

나는 그것을 탐구하기 전에 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"/> 

버튼 및 텍스트 뷰는 main.xml에에 모두 .

나는 Global.java라는 클래스에 정의 된 변수가 있습니다

package com.dantoth.drinkingbuddy; 

수입에는 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)을 누르면 표준 맥주에 맥주 1 잔을 마시 며 1을 더합니다. Bac 수식의 다른 변수에는 Global.java에 할당 된 값이 있습니다.

맥주 버튼 물건을 내 정규 수업에 할 수있는 코드, drinkingbuddy.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의 값을 가져야한다 BAC 버튼 (Button05)은 StandardDrinks가 여전히 0으로 설정된 것처럼 변수 Bac을 출력합니다. BAC 계산 버튼 (Button05)의 코드는 다음과 같습니다.

버튼 button4 = (버튼) findViewById (R.id.Button05)); button4.setOnClickListener (새 OnClickListener를() { @Override 공공 무효 온 클릭 (보기 V) {

하여 텍스트보기에 다음 그것은 출력
  TextView texty; 

      texty = (TextView) findViewById(R.id.texty1); 

      texty.setText("Your BAC is " + Global.Bac); 

     } 
     }); 

:. "당신의 BAC는 -0.017이다는"이것은 혈중 알코올 농도입니다 만약 StandardDrinks가 여전히 0 인 경우 클래스의 의사 소통에 문제가있는 것이 분명합니다. 누구든지 나를 도울 수 있습니까?

다른 요소는 무게, 시간, 음주 시간 및 알코올 % 등입니다.)은 최종 사용자가 설정에서 해당 값을 변경할 수 있도록하기 때문에 변수입니다.

전 세계 변수가 프로그래밍 스타일이 좋지 않다고 들었 습니다만, 이것이 작동하기 위해 가장 가까이에 왔습니다. 그것을하는 다른 방법은 대단히 환영합니다!

답변

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); 

     } 
     }); 

MY CODE 매우 지저분하다.

실제로 매우 지저분합니다. 불필요한 공개 선언과 정적 선언을 모두 제거하기가 어려웠습니다. 이 document은 Java 코드를 작성하는 동안 따라야 할 규칙에 도움이 될 수 있습니다.

이 선언되고 그들이 가장 작은 범위 수에 선언 있어야 할 곳에

변수를 초기화 할 수 있어야 해당 문서에서 인용 당으로.

올바른 방향으로 약간의 도움이되기를 바랍니다.

1

코딩 스타일 및 구조와 관련하여 매우 긴 응답이있을 수 있지만이를 생략하고 선행 과제를 계속 수행 할 것입니다.

변수의 값을 업데이트한다고해서 해당 변수로 수행 된 모든 계산이 업데이트되는 것은 아닙니다. 이 컨텍스트에서 StandardDrinks 값을 변경해도 Bac은 자동으로 다시 계산되지 않습니다. 특히 클래스 정적 멤버 변수의 값을 할당하는 코드는 클래스 설정 중에 한 번 실행됩니다. 실제로 dalvik VM이이를 정확히 수행하는지는 알지 못합니다. 포인트는 StandardDrinks 값을 변경 할 때마다 Bac을 다시 계산해야합니다.

+1

포인트 1이 잘못되었습니다. 나는 '최종'으로 정의 된 변수를 변경할 수 없다는 것을 의미한다고 생각합니다. '정적'을 선언하면 인스턴스에 대한 변수 대신 클래스에 대해 하나의 변수가 있음을 의미합니다. 포인트 2가 정확합니다. –

관련 문제