gpt4 book ai didi

java - 无法获取文本字段中的文本输入以解析为双倍

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

我无法从流程 Pane 的文本字段中的用户输入中获取文本。这看起来非常基本,我已经尝试过其他类似帖子的建议,但它们没有帮助。我需要访问输入以便将其转换为 double ,以便我可以对其进行计算。我的按钮设置为在单击时获取用户输入,这就是我遇到错误消息的时候:

Exception in thread "JavaFX Application Thread" 
java.lang.NumberFormatException: empty String

如有任何其他建议,我们将不胜感激;我是一名新程序员。该问题首先出现在 getLoanAmount 方法中,但也出现在需要获取我使用的其他文本字段中的文本的其他方法上。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;

//this class sets up the GUI and casts the data collected to variables for usage elsewhere
public class loanWithFeatures extends Application {

//define my constants
final int MONTHS_IN_YEAR = 12;

TextField loanAmountTF = new TextField();
TextField termTF = new TextField();
TextField interestRateTF = new TextField();

//main method
public static void main(String[] args) {
Application.launch(args);

}

@Override
public void start(Stage primaryStage) {

//define my button
Button btGo = new Button("Calculate Total Interest Cost");
btGo.setOnAction(new Calculate());

//make my flowpane
FlowPane flow = new FlowPane();

flow.setPadding(new Insets(11, 12, 13, 14));
flow.setHgap(5);
flow.setVgap(5);

//for some reason this has to be in this method. It didn't work above
loanAmountTF.setPrefWidth(800);
termTF.setPrefWidth(800);
interestRateTF.setPrefWidth(800);

flow.getChildren().addAll(new Label("Loan Amount:"), loanAmountTF);
termTF.setPrefColumnCount(2);
flow.getChildren().addAll(new Label("Term"), termTF);
interestRateTF.setPrefColumnCount(2);
flow.getChildren().addAll(new Label("Rate"), interestRateTF);

flow.getChildren().addAll(btGo);

//make the scene, put scene in flowpane
Scene scene = new Scene(flow);

//stage title
primaryStage.setTitle("Total Interest Cost");

//add scene to the stage
primaryStage.setScene(scene);

//show the stage
primaryStage.show();
}

class Calculate implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent e) {

//define my variables
double loanAmount = 0, term = 0, rate = 0, monthlyPayment = 0, monthlyInterest = 0, monthlyPrincipal =0, totalRepaid = 0, totalInterest =0, totalInterestPercentage =0;
double periodicInterestRate = 0, remainingPrincipal =0;

loanWithFeatures newLoan = new loanWithFeatures();
loanAmount = newLoan.getLoanAmount();
term = newLoan.getTerm(term);
rate = newLoan.getRate(rate);
periodicInterestRate = newLoan.periodicInterestRate(rate);
monthlyPayment = newLoan.monthlyPayment(loanAmount, periodicInterestRate, term);
remainingPrincipal = newLoan.remainingPrincipal(loanAmount, monthlyPayment, monthlyInterest);
monthlyInterest = newLoan.monthlyInterest(monthlyPayment, remainingPrincipal, periodicInterestRate);
monthlyPrincipal = newLoan.monthlyPrincipal(monthlyPayment, monthlyInterest);
totalRepaid = newLoan.totalRepaid(monthlyPayment, term);
totalInterest = newLoan.totalInterest(totalRepaid, loanAmount);
totalInterestPercentage = newLoan.totalInterestPercentage(loanAmount, totalInterest);
}
}

//method to get loan amount
public double getLoanAmount() {

double loanAmountDouble = Double.parseDouble(loanAmountTF.getText());

return loanAmountDouble;
}

//method to get term
public int getTerm(double term) {
//define a string var, assign the value from textfield to that, cast to int, return int
String termInput;

termInput = termTF.getText();

int termIntYear = Integer.parseInt(termInput);
int termIntMonths = termIntYear * MONTHS_IN_YEAR;

return termIntMonths;
}

//method to get rate
public double getRate(double rate) {
String rateInput;

rateInput = interestRateTF.getText();

double rateDouble = Integer.parseInt(rateInput);

return rateDouble;
}

//method to define balloon payment, when it occurs


//come back to this, I want it to be a checkbox, I don't know how to do that yet


//method, get interest only or no?
/*public boolean getInterestOnly(boolean interestOnly) {
Boolean interestOnlyBool = false;
String interestOnlyString = "uninitialized";

interestOnlyString = interestOnlyTF.getText();

//this only works if they input true, not something like yes
//TODO redo this with a radio list or dropdown that shows only true or false as selections
interestOnlyBool = Boolean.parseBoolean(interestOnlyString);

return interestOnlyBool;
} */

//method, type of amortization
//TODO come do this later when I know other types of amortization, just make it do full amortization right now


//method early repayment penalty?
//TODO do this after I do the math of the prepayment penalty


//this method calculates the monthly payment
public double monthlyPayment(double loanAmount, double periodicInterestRate, double term) {
double monthlyPaymentDenominator = (Math.pow(1 + periodicInterestRate, term) -1) / (periodicInterestRate * Math.pow(1 + periodicInterestRate, term));
double monthlyPayment = loanAmount / monthlyPaymentDenominator;

return monthlyPayment;
}

public double remainingPrincipal(double loanAmount, double monthlyPayment, double monthlyInterest ) {
double remainingPrincipal = loanAmount - (monthlyPayment - monthlyInterest);

return remainingPrincipal;
}

public double monthlyInterest(double monthlyPayment, double remainingPrincipal, double periodicIntRate) {
double monthlyInterest = remainingPrincipal * periodicIntRate;

return monthlyInterest;
}

//this method calculates monthly principal payment
public double monthlyPrincipal(double monthlyPayment, double monthlyInterest) {
double monthlyPrincipal = monthlyPayment - monthlyInterest;

return monthlyPrincipal;
}

public double periodicInterestRate(double rate) {

double periodicIntRate = rate / MONTHS_IN_YEAR;

return periodicIntRate;
}

public double totalRepaid(double monthlyPayment, double term) {
double totalRepaid = monthlyPayment * term;

return totalRepaid;
}

//this method calculates the total interest paid on the loan
public double totalInterest(double totalRepaid, double loanAmount) {
double totalInterest = totalRepaid - loanAmount;

return totalInterest;
}

//this method calculates total interest percentage
public double totalInterestPercentage(double loanAmount, double totalInterest) {
double totalInterestPercentage = totalInterest/loanAmount;

return totalInterestPercentage;
}

}

最佳答案

您遇到了有关 Java 中的实例和类的基本问题。您正在做的是调用类 loanWithFeatures 的新实例。此实例与您的应用程序在 main 中启动的实例不同(您尝试从中获取 TextField 的文本)。

loanWithFeatures newLoan = new loanWithFeatures(); 
loanAmount = newLoan.getLoanAmount();

所以我的建议是省略实例调用并这样做:

class Calculate implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent e) {

//define my variables
double loanAmount = 0, term = 0, rate = 0, monthlyPayment = 0, monthlyInterest = 0, monthlyPrincipal =0, totalRepaid = 0, totalInterest = 0, totalInterestPercentage = 0;
double periodicInterestRate = 0, remainingPrincipal = 0;

loanAmount = newLoan.getLoanAmount();
term = getTerm(term);
rate = getRate(rate);
periodicInterestRate = periodicInterestRate(rate);
monthlyPayment = monthlyPayment(loanAmount, periodicInterestRate, term);
remainingPrincipal = remainingPrincipal(loanAmount, monthlyPayment, monthlyInterest);
monthlyInterest = monthlyInterest(monthlyPayment, remainingPrincipal, periodicInterestRate);
monthlyPrincipal = monthlyPrincipal(monthlyPayment, monthlyInterest);
totalRepaid = totalRepaid(monthlyPayment, term);
totalInterest = totalInterest(totalRepaid, loanAmount);
totalInterestPercentage = totalInterestPercentage(loanAmount, totalInterest);
}
}

关于java - 无法获取文本字段中的文本输入以解析为双倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51180921/

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