gpt4 book ai didi

java - .to()方法的目的

转载 作者:行者123 更新时间:2023-12-02 04:22:50 25 4
gpt4 key购买 nike

我正在学习一个教程,并遇到了一个被使用了几次的 .to() 方法。我想知道它的目的是什么以及它是如何工作的。我试图通过谷歌找到答案,但没有得到我正在寻找的答案。我在下面附上了一段代码:

public void updateUnitTextFieldUsingTsp(double doubleToConvert, Quantity.Unit currentUnit,
Quantity.Unit preferredUnit, TextView targetTextView){


Quantity currentQuantitySelected = new Quantity(doubleToConvert, currentUnit);

String tempTextViewText = currentQuantitySelected.to(Quantity.Unit.tsp).to(preferredUnit)
.toString();

targetTextView.setText(tempTextViewText);

}

感谢所有帮助。

编辑:

我在下面添加了更多代码,其中包括完整的主要 Activity 和数量类:

数量等级:

public class Quantity {

final double value;
final Unit unit;

public static enum Unit{

tsp(1.0d), tbs(0.3333d), cups(0.0208d), oz(0.1666d), pint(0.0104d),
quart(0.0052d), gallon(0.0013d), pound(0.0125d), ml(4.9289d), liter(0.0049d),
mg(5687.5d), kg(0.0057d);

final static Unit baseUnit = tsp;

final double byBaseUnit;


private Unit(double inTsp){
this.byBaseUnit = inTsp;

}

public double toBaseUnit(double value){

return value / byBaseUnit;

}

public double fromBaseUnit(double value){

return value * byBaseUnit;
}


}

public Quantity(double value, Unit unit){
super();
this.value = value;
this.unit = unit;

}

public Quantity to(Unit newUnit){

Unit oldUnit = this.unit;
return new Quantity(newUnit.fromBaseUnit(oldUnit.toBaseUnit(value)), newUnit);


}

@Override
public String toString(){

DecimalFormat df = new DecimalFormat("#.0000");
return df.format(value) + " " + unit.name();

}

}

主要 Activity :

public class MainActivity extends AppCompatActivity {

private Spinner unitTypeSpinner;
private EditText amountTextView;

TextView teaspoonTextview, tablespoonTextview, cupTextView, ounceTextView,
pintTextView, quartTextView, gallonTextView, poundTextView,
milliliterTextView, literTextview, miligramTextView, kilogramTextView;

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

addItemsToUnitTypeSpinner();

addListnerToUnitTypeSpinner();

amountTextView = (EditText) findViewById(R.id.amount_text_view);

initializeTextViews();

}

public void initializeTextViews(){
teaspoonTextview = (TextView) findViewById(R.id.tsp_text_view);
tablespoonTextview = (TextView) findViewById(R.id.tbs_text_view);
cupTextView = (TextView) findViewById(R.id.cup_text_view);
ounceTextView = (TextView) findViewById(R.id.oz_text_view);
pintTextView = (TextView) findViewById(R.id.pint_text_view);
quartTextView = (TextView) findViewById(R.id.quart_text_view);
gallonTextView = (TextView) findViewById(R.id.gallon_text_view);
poundTextView = (TextView) findViewById(R.id.pound_text_view);
milliliterTextView = (TextView) findViewById(R.id.ml_text_view);
literTextview = (TextView) findViewById(R.id.liter_text_view);
miligramTextView = (TextView) findViewById(R.id.mg_text_view);
kilogramTextView = (TextView) findViewById(R.id.kg_text_view);
}

private void addItemsToUnitTypeSpinner(){
unitTypeSpinner = (Spinner) findViewById(R.id.unit_type_spinner);

ArrayAdapter<CharSequence> unitTypeSpinnerAdapter =
ArrayAdapter.createFromResource(this, R.array.conversion_types,
android.R.layout.simple_spinner_item);

unitTypeSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

unitTypeSpinner.setAdapter(unitTypeSpinnerAdapter);
}

public void addListnerToUnitTypeSpinner(){
unitTypeSpinner = (Spinner) findViewById(R.id.unit_type_spinner);

unitTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String itemSelectedInSpinner =
parent.getItemAtPosition(position).toString();

checkIfConvertingFromTsp(itemSelectedInSpinner);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
//TODO maybe something here later

}
});
}

public void checkIfConvertingFromTsp(String currentUnit) {
if (currentUnit.equals("teaspoon")) {

updateUnitTypesUsingTsp(Quantity.Unit.tsp);

} else {

if (currentUnit.equals("tabspoon")) {

updateUnitTypesUsingOther(Quantity.Unit.tbs);

} else if (currentUnit.equals("cup")) {

updateUnitTypesUsingOther(Quantity.Unit.cups);
} else if (currentUnit.equals("ounce")) {

updateUnitTypesUsingOther(Quantity.Unit.oz);
} else if (currentUnit.equals("pint")) {

updateUnitTypesUsingOther(Quantity.Unit.pint);
} else if (currentUnit.equals("quart")) {

updateUnitTypesUsingOther(Quantity.Unit.quart);
} else if (currentUnit.equals(("gallon"))) {

updateUnitTypesUsingOther(Quantity.Unit.gallon);
} else if (currentUnit.equals("pound")) {

updateUnitTypesUsingOther(Quantity.Unit.pound);
} else if (currentUnit.equals("milliliter")) {

updateUnitTypesUsingOther(Quantity.Unit.ml);
} else if (currentUnit.equals("liter")) {

updateUnitTypesUsingOther(Quantity.Unit.liter);
} else if (currentUnit.equals("milligram")) {

updateUnitTypesUsingOther(Quantity.Unit.mg);
} else {

updateUnitTypesUsingOther(Quantity.Unit.kg);
}
}
}


public void updateUnitTypesUsingTsp(Quantity.Unit currentUnit){

double doubleToConvert = Double.parseDouble(amountTextView.getText().toString());

String teaspoonValueAndUnit = doubleToConvert + " tsp";

teaspoonTextview.setText(teaspoonValueAndUnit);

updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.tbs, tablespoonTextview);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.cups, cupTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.oz, ounceTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.pint, pintTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.quart, quartTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.gallon, gallonTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.pound, poundTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.ml, milliliterTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.liter, literTextview);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.mg, miligramTextView);
updateUnitTextFieldUsingTsp(doubleToConvert, Quantity.Unit.kg, kilogramTextView);
}

public void updateUnitTextFieldUsingTsp(double doubleToConvert, Quantity.Unit unitConvertingTo,
TextView theTextView){

Quantity unitQuantity = new Quantity(doubleToConvert, Quantity.Unit.tsp);

String temptUnit = unitQuantity.to(unitConvertingTo).toString();
theTextView.setText(temptUnit);

}

public void updateUnitTypesUsingOther(Quantity.Unit currentUnit){

double doubleToConvert = Double.parseDouble(amountTextView.getText().toString());

Quantity currentQuantitySelected = new Quantity(doubleToConvert, currentUnit);

String valueInTeaspoons = currentQuantitySelected.to(Quantity.Unit.tsp).toString();

teaspoonTextview.setText(valueInTeaspoons);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.tbs,
tablespoonTextview);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.cups,
cupTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.oz,
ounceTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.pint,
pintTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.gallon,
gallonTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.pound,
poundTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.ml,
milliliterTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.liter,
literTextview);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.mg,
miligramTextView);

updateUnitTextFieldUsingTsp(doubleToConvert, currentUnit, Quantity.Unit.kg,
kilogramTextView);

if(currentUnit.name().equals(currentQuantitySelected.unit.name())){

String currentUnitTextViewText = doubleToConvert + " " +
currentQuantitySelected.unit.name();

String currentTextViewName = currentQuantitySelected.unit.name() + " _text_view";

int currentId = getResources().getIdentifier(currentTextViewName, "id",
MainActivity.this.getPackageName());

TextView currentTextView = (TextView) findViewById(currentId);

currentTextView.setText(currentUnitTextViewText);

}

}

public void updateUnitTextFieldUsingTsp(double doubleToConvert, Quantity.Unit currentUnit,
Quantity.Unit preferredUnit, TextView targetTextView){


Quantity currentQuantitySelected = new Quantity(doubleToConvert, currentUnit);

String tempTextViewText = currentQuantitySelected.to(Quantity.Unit.tsp).to(preferredUnit)
.toString();

targetTextView.setText(tempTextViewText);

}

我正在按照教程创建一个应用程序,将一个单位的数量转换为另一个单位(单位转换器)。

最佳答案

Quantity 类由数字和单位组成。 Unit 基本上是一个因素。代码中所谓的基本单位就是因子为1的单位。因此使用了Unit类中的方法toBaseUnitfromBaseUnit将数字从给定单位转换为基本单位,反之亦然。 .to() 方法的目的是创建一个新的 Quantity 对象,该对象表示与旧对象相同的数量。但是,新的 Quantity 对象应使用 newUnit 来存储数量。为了更清楚地说明,以下等式(用伪代码编写)应该为真:

oldQ.value * oldQ.unit.byBaseUnit == newQ.value * newQ.unit.byBaseUnit

oldQnewQ 表示旧的和新的数量对象。

因此,在上面的代码中,您可以替换该行...

String tempTextViewText = currentQuantitySelected
.to(Quantity.Unit.tsp)
.to(preferredUnit)
.toString();

...通过这段代码...

String tempTextViewText = currentQuantitySelected
.to(preferredUnit)
.toString();

...因为 to() 方法已经处理了从旧单位到基本单位,然后到 preferredUnit 的转换。 to() 方法实际上并不改变数量,而是改变其表示形式。

关于java - .to()方法的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com