Java for循环中的输入对话不工作?
我对Java非常陌生,正在尝试为复利计算器制作一个基本的GUI。我将字符串设置为接收用户输入,它适用于前两个double,但是当我希望字符串接受for循环长度的输入时,我得到了一个错误。我想做的是不可能的吗Java for循环中的输入对话不工作?,java,swing,Java,Swing,我对Java非常陌生,正在尝试为复利计算器制作一个基本的GUI。我将字符串设置为接收用户输入,它适用于前两个double,但是当我希望字符串接受for循环长度的输入时,我得到了一个错误。我想做的是不可能的吗 import javax.swing.JOptionPane; class Sample { public static void main(String[] args) { String p = JOptionPane.showInputDialog("Ente
import javax.swing.JOptionPane;
class Sample {
public static void main(String[] args) {
String p = JOptionPane.showInputDialog("Enter initial investment: ");
String r = JOptionPane.showInputDialog("Enter interest rate (as a decimal): ");
String y = JOptionPane.showInputDialog("Enter time period (in years): ");
double num1 = Integer.parseInt(p);
double num2 = Integer.parseInt(r);
double num3 = Integer.parseInt(y);
double amount;
for(double year = 1; year <= y; year++){
amount = num1 * Math.pow(1 + num2, year);
}
JOptionPane.showMessageDialog(null, "The answer is: " + amount, "the title", JOptionPane.PLAIN_MESSAGE);
}
}
import javax.swing.JOptionPane;
类样本{
公共静态void main(字符串[]args){
字符串p=JOptionPane.showInputDialog(“输入初始投资:”);
字符串r=JOptionPane.showInputDialog(“输入利率(以十进制形式):”;
字符串y=JOptionPane.showInputDialog(“输入时间段(以年为单位):”;
double num1=整数.parseInt(p);
double num2=Integer.parseInt(r);
double num3=整数.parseInt(y);
双倍金额;
对于(double year=1;year您不使用double,而是使用字符串
这样做:
for(double year = 1; year <= num3 ; year++){
amount = num1 * Math.pow(1 + num2, year);
}
借
编辑以回答OP的评论。
如果要为年份提供浮动值,则应在进入循环之前将该值四舍五入到上级值,并在循环的退出条件中使用该值
String y = JOptionPane.showInputDialog("Enter time period (in years): ");
...
double year = Double.parseDouble(y);
在循环之前和循环中,您应该:
double iteration = Math.ceil(num3);
for(double year = 1; year <= iteration; year++){
amount = num1 * Math.pow(1 + num2, year);
}
double迭代=Math.ceil(num3);
对于(double year=1;year您不使用double,而是使用字符串
这样做:
for(double year = 1; year <= num3 ; year++){
amount = num1 * Math.pow(1 + num2, year);
}
借
编辑以回答OP的评论。
如果要为年份提供浮动值,则应在进入循环之前将该值四舍五入到上级值,并在循环的退出条件中使用该值
String y = JOptionPane.showInputDialog("Enter time period (in years): ");
...
double year = Double.parseDouble(y);
在循环之前和循环中,您应该:
double iteration = Math.ceil(num3);
for(double year = 1; year <= iteration; year++){
amount = num1 * Math.pow(1 + num2, year);
}
double迭代=Math.ceil(num3);
对于(双年度=1;年度),使用此功能应能正常工作:
String p = JOptionPane.showInputDialog("Enter initial investment: ");
String r = JOptionPane.showInputDialog("Enter interest rate (as a decimal): ");
String y = JOptionPane.showInputDialog("Enter time period (in years): ");
double num1 = Double.parseDouble(p);
double num2 = Double.parseDouble(r);
double num3 = Double.parseDouble(y);
double amount = 0;
for(double year = 1; year <= num3; year++){
amount = num1 * Math.pow(1 + num2, year);
}
JOptionPane.showMessageDialog(null, "The answer is: " + amount, "the title", JOptionPane.PLAIN_MESSAGE);
String p=JOptionPane.showInputDialog(“输入初始投资:”);
字符串r=JOptionPane.showInputDialog(“输入利率(以十进制形式):”;
字符串y=JOptionPane.showInputDialog(“输入时间段(以年为单位):”;
double num1=double.parseDouble(p);
double num2=double.parseDouble(r);
double num3=double.parseDouble(y);
双倍金额=0;
对于(双年度=1;年度),使用此功能应能正常工作:
String p = JOptionPane.showInputDialog("Enter initial investment: ");
String r = JOptionPane.showInputDialog("Enter interest rate (as a decimal): ");
String y = JOptionPane.showInputDialog("Enter time period (in years): ");
double num1 = Double.parseDouble(p);
double num2 = Double.parseDouble(r);
double num3 = Double.parseDouble(y);
double amount = 0;
for(double year = 1; year <= num3; year++){
amount = num1 * Math.pow(1 + num2, year);
}
JOptionPane.showMessageDialog(null, "The answer is: " + amount, "the title", JOptionPane.PLAIN_MESSAGE);
String p=JOptionPane.showInputDialog(“输入初始投资:”);
字符串r=JOptionPane.showInputDialog(“输入利率(以十进制形式):”;
字符串y=JOptionPane.showInputDialog(“输入时间段(以年为单位):”;
double num1=double.parseDouble(p);
double num2=double.parseDouble(r);
double num3=double.parseDouble(y);
双倍金额=0;
对于(double year=1;year是您的程序被编译的原因,因为您正在比较double和Stringyear,您的程序将不会只编译。提示:year通常是整数;因此您从不使用浮点数来表示它们。这意味着:您的数字默认值应该是int或long;您实际上只使用浮点数好吧…浮点数。不适用于年、日或月。还有:非常糟糕的命名。num1…num3什么都不说。只需使用投资、利率和periodInYears。谢谢你的提示。你的程序之所以被编译是因为你在比较双精度和字符串年,你的程序将不会编译。提示:年是典型的整数;所以你从不使用浮点数来表示它们。意思是:你对数字的默认值应该是int或long;你实际上只对井使用浮点数…浮点数。不适用于年、日或月。还有:非常糟糕的命名。num1…num3什么都不说。只需使用投资、利率和periodInYears相反。谢谢你的提示。解决办法是告诉他不要把num1…变成双精度。解析int是个好主意;但是把值变成双精度是个愚蠢的主意!@GhostCat如果你阅读输入应该是什么,int不是变量的正确类型。你想如何将十进制数作为整数处理?我们都是对的。num1num2应该是双倍的。但是num3代表年。但是存在这样的可能性,你只需要一半year@MrHuebl如果你想要的话,请随意投票并接受答案。这适用于你问的每一个问题,如果有正确的答案,请投票并接受它。解决方法是告诉他不要让num1…变得愚蠢les。解析整数是个好主意;但将值推到双倍中是个愚蠢的主意!@GhostCat如果你阅读输入应该是什么,整数不是变量的正确类型。你想如何将十进制数处理为整数?我们都是对的。num1和num2可能应该是双倍的。但num3代表年份。但这种可能性仍然存在s、 你只想要一半year@MrHuebl如果它工作正常,请随意投票并接受答案。这适用于您提出的每个问题,如果有正确的答案,请投票并接受。输入第三个数字后,我会收到以下错误。线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“.04”在java.lang.NumberFormatException.forInputString(未知源代码)在java.lang.Integer.parseInt(未知源代码)在java.lang.Integer.parseInt(未知源代码)在Sample.main(Sample.java:13)在java.lang.Integer.parseInt(未知源代码)在Sample.main(Sample.java:13),因为您使用了Integer.parseInt()方法,您提供的不是int值而是双值。我理解您的需要。我编辑了我的答案。谢谢!这帮了大忙。欢迎:)但是,有些代码让我恼火。<代码> NUM3从来没有用作代码中的一个浮动值。如果你为你提供一个小数部分,那么当你计算这个量时,你不应该考虑<代码的小数部分> NUM3< /代码>吗?在输入第三个数之后,我会遇到以下错误。java java语言中的输入字符串:“04”,在java.郎.整数。