Java 未为变量赋值的主活动
在我的家庭作业问题中,我应该根据用户提供的贷款金额、利率和贷款期限来计算每月的贷款付款。这要使用intent来完成 当我运行应用程序时,变量的值从不从0更改,然后它会转到应用程序的第二页,在那里应该显示结果,但它会显示NaN,在那里应该显示结果 我对Android开发非常陌生,我不知道问题发生在哪里,所以我发布了我所有的主要Java代码 名为Loan.java的类Java 未为变量赋值的主活动,java,android,android-intent,Java,Android,Android Intent,在我的家庭作业问题中,我应该根据用户提供的贷款金额、利率和贷款期限来计算每月的贷款付款。这要使用intent来完成 当我运行应用程序时,变量的值从不从0更改,然后它会转到应用程序的第二页,在那里应该显示结果,但它会显示NaN,在那里应该显示结果 我对Android开发非常陌生,我不知道问题发生在哪里,所以我发布了我所有的主要Java代码 名为Loan.java的类 package com.example.collegeloanpayoffcalculator; public class Loa
package com.example.collegeloanpayoffcalculator;
public class Loan
{
public static double loanAmount = 0.0;
public static double interestRate = 0.0;
public static int loanDuration = 0;
//public static double monthlyPayment = 0.0;
public double amount;
public double interest;
public double duration;
//public double payment;
public Loan() {}
public Loan(double amount, double interest, double duration)
{
this.amount = amount;
this.interest = interest;
this.duration = duration;
}
}
public void calculatePayment(View view)
{
Intent intent = new Intent(this, paymentViewActivity.class);
EditText loanAmount = (EditText) findViewById(R.id.loanAmount);
Editable amount = loanAmount.getText();
intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));
EditText interestRate = (EditText) findViewById(R.id.interestRateEditText);
Editable interest = interestRate.getText();
intent.putExtra(String.valueOf(Loan.interestRate), interest);
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.duration);
int selected_id = radioGroup.getCheckedRadioButtonId();
RadioButton radio_b = (RadioButton) findViewById(selected_id);
intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());
startActivity(intent);
}
}
public class paymentViewActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loan_payment);
Intent intent = getIntent();
double amount = intent.getDoubleExtra("loanAmount", loanAmount);
double interest = intent.getDoubleExtra("interestRate", interestRate);
int duration = intent.getIntExtra("loanDuration", loanDuration);
double payment = amount * interest / (1 - 1 / Math.pow(1 + interest, duration * 12));
TextView Payment = findViewById(R.id.loanPayment);
Payment.setText(Double.toString(payment));
}
名为MainActivity.java的类
package com.example.collegeloanpayoffcalculator;
public class Loan
{
public static double loanAmount = 0.0;
public static double interestRate = 0.0;
public static int loanDuration = 0;
//public static double monthlyPayment = 0.0;
public double amount;
public double interest;
public double duration;
//public double payment;
public Loan() {}
public Loan(double amount, double interest, double duration)
{
this.amount = amount;
this.interest = interest;
this.duration = duration;
}
}
public void calculatePayment(View view)
{
Intent intent = new Intent(this, paymentViewActivity.class);
EditText loanAmount = (EditText) findViewById(R.id.loanAmount);
Editable amount = loanAmount.getText();
intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));
EditText interestRate = (EditText) findViewById(R.id.interestRateEditText);
Editable interest = interestRate.getText();
intent.putExtra(String.valueOf(Loan.interestRate), interest);
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.duration);
int selected_id = radioGroup.getCheckedRadioButtonId();
RadioButton radio_b = (RadioButton) findViewById(selected_id);
intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());
startActivity(intent);
}
}
public class paymentViewActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loan_payment);
Intent intent = getIntent();
double amount = intent.getDoubleExtra("loanAmount", loanAmount);
double interest = intent.getDoubleExtra("interestRate", interestRate);
int duration = intent.getIntExtra("loanDuration", loanDuration);
double payment = amount * interest / (1 - 1 / Math.pow(1 + interest, duration * 12));
TextView Payment = findViewById(R.id.loanPayment);
Payment.setText(Double.toString(payment));
}
名为paymentViewActivity.java的类
package com.example.collegeloanpayoffcalculator;
public class Loan
{
public static double loanAmount = 0.0;
public static double interestRate = 0.0;
public static int loanDuration = 0;
//public static double monthlyPayment = 0.0;
public double amount;
public double interest;
public double duration;
//public double payment;
public Loan() {}
public Loan(double amount, double interest, double duration)
{
this.amount = amount;
this.interest = interest;
this.duration = duration;
}
}
public void calculatePayment(View view)
{
Intent intent = new Intent(this, paymentViewActivity.class);
EditText loanAmount = (EditText) findViewById(R.id.loanAmount);
Editable amount = loanAmount.getText();
intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));
EditText interestRate = (EditText) findViewById(R.id.interestRateEditText);
Editable interest = interestRate.getText();
intent.putExtra(String.valueOf(Loan.interestRate), interest);
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.duration);
int selected_id = radioGroup.getCheckedRadioButtonId();
RadioButton radio_b = (RadioButton) findViewById(selected_id);
intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());
startActivity(intent);
}
}
public class paymentViewActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loan_payment);
Intent intent = getIntent();
double amount = intent.getDoubleExtra("loanAmount", loanAmount);
double interest = intent.getDoubleExtra("interestRate", interestRate);
int duration = intent.getIntExtra("loanDuration", loanDuration);
double payment = amount * interest / (1 - 1 / Math.pow(1 + interest, duration * 12));
TextView Payment = findViewById(R.id.loanPayment);
Payment.setText(Double.toString(payment));
}
您只需要添加字符串名,然后您就可以从extras获得它
intent.putExtra("interest", interest);
intent.putExtra("loanduration", radio_b.getText().toString());
这是因为在意向中添加扩展数据时,您有不同的密钥。您正在
“Loan.loanAmount”
中使用以下输入计算支付方法:
intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));
但是您希望在paymentViewActivity
类中使用“loanAmount”
:
public class paymentViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
double amount = intent.getDoubleExtra("loanAmount", loanAmount);
}
请注意,Intent.putExtra(字符串,值)
正在为参数使用键值格式。字符串是特定值的键标识符
因此,使用相同的键进行额外输入。更安全的方法是在相关活动中使用常量字符串作为键。例如,对贷款金额值使用LOAN\u AMOUNT\u KEY
常量字符串:
public class paymentViewActivity extends AppCompatActivity {
public static final String LOAN_AMOUNT_KEY = "loanAmountKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// use the key to find the value
// you won't use the incorrect key because
// the key is tightly coupled to the activity
double amount = intent.getDoubleExtra(LOAN_AMOUNT_KEY, loanAmount);
}
}
然后,在calculatePayment
方法中,在保存值时使用键:
public void calculatePayment(View view) {
Intent intent = new Intent(this, paymentViewActivity.class);
...
double amount = Double.valueOf(amount.toString());
intent.putExtra(paymentViewActivity.LOAN_AMOUNT_KEY, amount);
...
}
注意:
为活动使用正确的java命名约定类名。例如,使用PaymentViewActivity
代替PaymentViewActivity
避免对模型成员类使用public static
。你最好使用getter/setter
尝试使用此库: