2016-12-19 9 views
1

私はJavaを使い始めていて、複利計算機の基本GUIを作ろうとしています。私はユーザー入力を受け取るように文字列を設定し、それは最初の2つの倍精度で動作しますが、forループの長さにStringを入力させたい場合、エラーが発生します。私がしようとしていることはできないのですか?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); 
    } 
} 
+0

doubleとString 'year <= y'を比較しているので、プログラムがコンパイルされますか? – SachinSarawgi

+0

プログラムはコンパイルされません。 – SachinSarawgi

+0

ヒント:年数は通常**全体の**数値です。浮動小数点数を使ってそれらを表現することは決してありません。意味:数値のデフォルトはintまたはlongでなければなりません。実際には、浮動小数点数だけ浮動小数点数を使用します。数年、数日または数ヶ月間ではありません。そして:**超悪い**命名。 num1 ... num3は何も言いません。代わりに、investment、interestRate、およびperiodInYearsを使用してください。 – GhostCat

答えて

0

ダブルを使用せずに文字列を使用します。

ことを行います:量のほかに

for(double year = 1; year <= num3 ; year++){ 
     amount = num1 * Math.pow(1 + num2, year); 
    } 

は、それ以外の場合はコンパイルされません使用される前に初期化する必要があります。

ので交換してください:

double amount; 

OPのコメントに答えるために
double amount=0; 

EDITで。

年に浮動小数点値を指定する場合は、ループに入る前にこの値を上限値に丸めて、ループの終了条件に使用する必要があります。

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); 
    } 

あなたは年間の入力のための0.4を入力すると、あなたは一度ループを1.0に丸めるため、あなた。

それが動作するはずこれで
+0

スレッド "main"の3番目のnumber.Exceptionを入力した後、次のエラーが発生しましたjava.lang.NumberFormatException:入力文字列: ".04" \t(java.lang.NumberFormatException.forInputString(Unknown Source)) \t java .lang.Integer.parseInt(不明なソース)java.lang.Integer.parseIntで \t(不明なソース)Sample.main(Sample.java:13)で \t – MrHuebl

+0

あなたのユーザーInteger.parseInt()メソッドは、あなたが提供しているのでint値ではなくdouble値です。私はあなたの必要性を理解しました。私は私の答えを編集しました。 – davidxxx

+0

ありがとう!これは多くの助けとなりました。 – MrHuebl

0

:あなたは、二重にしたい場合は

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); 

は、Integer.parseInt()を使用しないでください。 forループの文字列とdouble/integerを比較することもできません

+0

修正は**にnum1を作るのではなく、** doubleにするように伝えることです。 intを解析するのは良い考えでした。値を2倍にする**ばかげた**アイデア! – GhostCat

+0

@GhostCat入力を読み込む必要がある場合、intは変数に適切な型ではありません。どのように10進数を整数として処理したいですか? – XtremeBaumer

+0

私たちはどちらも正しいです。 num1とnum2はおそらく倍にする必要があります。しかし、num3は**年**を表します。 – GhostCat

関連する問題