我的程序现在执行以下操作:
根据选择的转换(使用单选按钮),我需要调用一个方法来执行转换的计算,然后将转换返回到案例但是我遇到了问题,因为我返回了一个double。
package com.exercise_5;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class MainActivity extends Activity {
private String textValue;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
// Method called when the convert button is clicked
public void convert(View view) {
RadioGroup conRadioGroup = (RadioGroup) findViewById(R.id.conRadioGroup);
EditText textValue = (EditText) findViewById(R.id.editText1);
switch(conRadioGroup.getCheckedRadioButtonId()) {
case R.id.radioCelsiusToFahrenheit:
// Call the convert method
fahrenheitToCelsius();
//Return the converted variable
break;
case R.id.radioFahrenheitToCelsius:
fahrenheitToCelsius();
break;
default:
Log.e("Some class tag", "Invalid id was passed to conversion method doing celsius conversion.");
return celsiusToFahrenheit();
break;
}
}
public void fahrenheitToCelsius(Convert tempCelsius) {
double conCelsius = Double.parseDouble(textValue);
//Calculate Celsius
tempCelsius = ((conCelsius * 9) / 5) + 32;
}
public double celsiusToFahrenheit(double tempInFahrenheit) {
double conFahrenheit = Double.parseDouble(textValue);
//Calculate Fahrenheit
return ((conFahrenheit * 9) / 5) + 32;
}
public void clear(View view) {
//Reset Appended Strings After Previous Run
TextView fahrenheit_TV = (TextView) this.findViewById(R.id.textView1);
TextView celsius_TV = (TextView) this.findViewById(R.id.textView3);
fahrenheit_TV.setText("Fahrenheit: ");
celsius_TV.setText("Celsius: ");
}
}
答案 0 :(得分:1)
我认为你得到的问题是因为你的操作是用整数进行的(乘以9除以5),因此编译器在进行微积分时将conCelsius转换为int,而应该是这样的:< / p>
return ((conCelsius * 9.0) / 5.0) + 32;
答案 1 :(得分:1)
((conCelsius * 9)/ 5)+ 32
操作是双重的。
要回答实际问题,代码有几个问题。设置相关单选按钮的正确方法是将它们分组到单选按钮组中(我假设您没有给出代码)。有关示例,请参阅http://www.mkyong.com/android/android-radio-buttons-example/
执行此操作后,您可以检查单选按钮的ID选择了哪些按钮。
这是代码的总体布局:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
radioTempConvGroup = (RadioGroup) findViewById(R.id.radioTempConvGroup);
btnConvert = (Button) findViewById(R.id.btnConvert);
btnConvert.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// get selected radio button from radioGroup
int selectedId = radioTempConvGroup.getCheckedRadioButtonId();
double convertedTemp = convert(selectedId);
//do other operations with convertedTemp like display
}
});
private double convertTemp(int selectedId) {
//TODO get value from the textview that holds the value
double temperature = //INSERT code to get the value to convert
switch(selectedId) {
case R.id.radioCelsius:
return celsiusToFahrenheit(temperature);
break;
case R.id.radioFahrenheit:
return fahrenheitTocelsius(temperature);
break;
default:
Log.e("Some class tag", "Invalid id was passed to conversion method doing celsius conversion.");
return celsiusToFahrenheit(temperature);
break;
}
}
private double celsiusToFahrenheit(double tempInCelsius) {
//TODO add actual conversion
}
private double fahrenheitToCelsius(double tempInFahrenheit) {
//TODO add actual conversion
}
您的代码存在以下问题:
始终使用if和类似结构的大括号,以防止执行一条指令而不是几条指令。我假设
case R.id.radioButton1:
if (checked)
fahrenheit();
//Append Strings
fahrenheit_TV.append(" " +fahrenheit.conversion);
break;
旨在作为
case R.id.radioButton1:
if (checked) {
fahrenheit();
//Append Strings
fahrenheit_TV.append(" " +fahrenheit.conversion);
}
break;
但是只有if后面的指令才会在您的版本中执行。
当原始双倍足够时,不要使用Double。对象创建和装箱和拆箱是昂贵的操作。
public static double fahrenheit(Double conversion) {
Double conCelsius = Double.parseDouble(getCelsius);
//Calculate Celsius
return ((conCelsius * 9) / 5) + 32;
}
应该是:
public static double fahrenheit(double conversion) {
double conCelsius = Double.parseDouble(getCelsius);
//Calculate Celsius
return ((conCelsius * 9) / 5) + 32;
}
第三,尝试在整个代码中保持一致和/或尝试使用java约定,这使得其他人(以及6个月后的您)更容易阅读代码。 一个方法名称以大写字母开头,另一个以小写字母开头。一些变数 使用_进行分离,其他使用驼峰的情况。