Java 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

我对Java非常陌生,正在尝试为复利计算器制作一个基本的GUI。我将字符串设置为接收用户输入,它适用于前两个double,但是当我希望字符串接受for循环长度的输入时,我得到了一个错误。我想做的是不可能的吗

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和String
year,您的程序将不会只编译。提示: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.郎.整数。