• ベストアンサー

BMI

プログラムについての質問です 以下のプログラム(java)の星の部分で BMI.java:9: シンボルを見つけられません。 シンボル: メソッド toString(double) 場所 : java.lang.Integer の クラス String msg=Integer.toString(num2/(num1*num1)); ^ エラー 1 個 というエラーがでます まだjavaを勉強しだしたばっかりなんですが、参考書を見てもさっぱりわかりません どなたかわかりやすく解説していただけませんか? 内容は身長と体重を入力するとBMIを計算するプログラムです。 import javax.swing.*; public class BMI{ public void run(){ String text1=JOptionPane.showInputDialog("Height:"); double num1=Integer.parseInt(text1); String text2=JOptionPane.showInputDialog("Weight:"); double num2=Integer.parseInt(text2); ★String msg=Integer.toString(num2/(num1*num1)); JOptionPane.showMessageDialog(null,msg); } public static void main(String[] args){ BMI bmi = new BMI(); bmi.run(); } }  よろしくおねがいします

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

> double num1=Integer.parseDouble(text1); > double num2=Integer.parseDouble(text2); > に変えたのですがこの後がわかりません… これでは コンパイルは通らないでしょう double num1= Double.parseDouble(text1); double num2= Double.parseDouble(text2); にします 計算結果を受ける変数を準備して、これのtoStringメソッドを使いましょう double res = num2 / ( num1 * num1 ); String msg = res.toString(); といった具合です 直接やるなら String msg = ((Double)(num2 / (num1 * num1))).toString(); といったようにキャストしてやるとか (num2 / (num1 * num1)) の結果をDouble型にする記述が (Double)(num2 / (num1 * num1))となります ... 1) Double型のオブジェクトのtoStringを使うため 1)の全体を()で括ります ((Double)(num2 / (num1 * num1))).toString(); つまり 先の例のresが((Double)(num2 / (num1 * num1)))の部分にあたります

346mouse
質問者

お礼

解決しました!! 丁寧な回答ありがとうございました。

その他の回答 (2)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

> BMI.java:9: シンボルを見つけられません。 > シンボル: メソッド toString(double) > 場所 : java.lang.Integer の クラス > String msg=Integer.toString(num2/(num1*num1)); > ^ > エラー 1 個 IntegerクラスのtoString()メソッドに、doubleを引数とするものがないので、 出ているエラーだと思われます。 計算結果をStringにしたいだけなら、 // ★String msg=Integer.toString(num2/(num1*num1)); String msg = "" + num2 / (num1 * num1); で十分だと思います。

346mouse
質問者

お礼

回答ありがとうございました。

346mouse
質問者

補足

>計算結果をStringにしたいだけなら 計算結果をdoubleにしたい場合はどうすればいいですか? double num1=Integer.parseInt(text1); double num2=Integer.parseInt(text2); を double num1=Integer.parseDouble(text1); double num2=Integer.parseDouble(text2); に変えたのですがこの後がわかりません…

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そのまま... だよなぁ. double の値を変換するのに, なぜ Integer を使ったんだろう.

関連するQ&A

  • インスタンスの情報表示について

    Java初心者です。 例えば次のようなソースがあって、double型の変数numの情報を表示するためにtoStringをオーバーライドするとすると、どのようにすればStringを返せるのでしょうか。 public class Test { private double[] num; public Test(double a, double b, double c) { num = new double[3]; this.num[0]=a; this.num[1]=b; this.num[2]=c; } public toString() { // return "インスタンスは: "+ } public static void main(String args[]) { Test a = new Test(4.3, 5.6, 12.7); System.out.println(a.toString()); } }

  • JAVAでエラーがでる。

    JAVA初心者なのですが、下のプログラムは数値を入力して、それを表示させるという簡単なプログラムなのですが、実行すると、 String str = br.readLine(); のbr.readLine();の部分に赤い波線が出て、 「処理されない例外の型 IOException at B.main(B.java:11)」 というエラーが出てしまってこまっています。 参考書のとうりに入力しているのになぜでしょうか? タブやスペースが使えないので見にくくなってしまってすみません。 どなたかJAVAに詳しい方 教えてください。 import java.io.*; public class B { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); System.out.println(num + "が入力されまた。"); } }

    • ベストアンサー
    • Java
  • Javaの質問です。

    データに0より小さい数値がある場合、その行を取り除いて集計させ、エラーがある行だけを別ファイルに書きだしたいのですが、うまくいきません。 なにかアドバイスいただけますでしょうか? よろしくお願いします。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; class Data { double value; Data(double value) { this.value = value; } void setData(double value) { this.value = value; } public String toString() { return String.format("%5.1f", value); } } class Statistics { Data min = new Data(999.9); Data max = new Data(0.0); double total = 0.0; void add(double value) { if (min.value > value) { min.setData(value); } if (max.value < value) { max.setData(value); } total += value; } } class Category { String category; Statistics height = new Statistics(); Statistics weight = new Statistics(); Statistics bmi = new Statistics(); int num = 0; Category(String category) { this.category = category; } void add(double height, double weight) { this.height.add(height); this.weight.add(weight); this.bmi.add(weight / (height / 100.0 * height / 100.0)); num++; } public String toString() { return category + "," + "身長" + "," + "最高" + "," + height.max + "\n" + category + "," + "身長" + "," + "最低" + "," + height.min + "," + "\n" + category + "," + "身長" + "," + "平均" + "," + String.format("%5.1f\n", height.total / num) + category + "," + "体重" + "," + "最高" + "," + weight.max + "," + "\n" + category + "," + "体重" + "," + "最低" + "," + weight.min + "\n" + category + "," + "体重" + "," + "平均" + "," + String.format("%5.1f\n", weight.total / num) + category + "," + "BMI" + "," + "最高" + "," + bmi.max + "\n" + category + "," + "BMI" + "," + "最低" + "," + bmi.min + "\n" + category + "," + "BMI" + "," + "平均" + "," + String.format("%5.1f\n", bmi.total / num); } } class Health { Category male = new Category("男"); Category famale = new Category("女"); Category total = new Category("全体"); void add(String sex, double height, double weight) { if (sex.equals("男")) { male.add(height, weight); } else { famale.add(height, weight); } total.add(height, weight); } public String toString() { return "" + male + "\n" + famale + "\n" + total + "\n"; } } public class Main { static final String FILENAME = "hw.csv"; static final String SEPARATOR = ","; static final int SEX = 2, HEIGHT = 3, WEIGHT = 4; public static void main(String[] args) throws Exception { Health health = new Health(); String line; BufferedReader file = new BufferedReader(new FileReader(FILENAME)); for (int number = 1; (line = file.readLine()) != null; number++) { String[] item = line.split(SEPARATOR); try { if(Integer.parseInt(item[HEIGHT]) <= 0 || Integer.parseInt(item[WEIGHT]) <= 0 || item[HEIGHT] == null || item[WEIGHT] == null) { PrintWriter pw = new PrintWriter( new BufferedWriter (new FileWriter("out_error.csv"))); pw.println(number); pw.close(); health.add(item[SEX],Double.parseDouble(item[HEIGHT]),Double.parseDouble(item[WEIGHT])); } } catch (Exception e) { } } file.close(); PrintWriter pw = new PrintWriter( new BufferedWriter (new FileWriter("out.csv"))); pw.println(health); pw.close(); } }

  • JARファイルをコンソールで表示できません。

    EclipseでJarファイルを作成しました。 ソースは以下のとおりなのですが、 Jarファイルをダブルクリックすると、ダイアログボックスだけが表示されます。 コンソール出力をしたいのですが、どうすればいいでしょうか?よろしくお願いします。 WindowsXpです。 ---------------------------------------- import javax.swing.*; public class test { public static void main(String[] args) { System.out.println("Hello Java"); JOptionPane.showInputDialog("Show Dialog"); System.out.println("Hello Java"); } } ----------------------------------------

    • ベストアンサー
    • Java
  • オーバーライド

    こんにちは。 javaの勉強をしているのですが コンパイルエラーが発生しました。 オーバーライドのプログラムに関する質問です。 まずはプログラムなんですが class Human{ protected String name; protected int height; protected double weight; public Human(){ name = ""; height = 0; weight = 0.0; } public void setName(String n){ name = n; } public void setHeight(int h){ height = h; } public void setWeight(double w){ weight = w; } public void show(){ System.out.println(name + "の身長は" + height + "cm。体重は" + weight + "kgです。"); } } class Teacher extends Human{ private String cource; public void setCource(String c){ cource = c; } public void show(){ System.out.println("担当科目は" + course + "です。"); } } class Ex73{ public static void main(String args[]){ Student human1 = new Student(); human1.setName("一郎"); human1.setHeight(164); human1.setWeight(62.5); human1.setCourse("java"); human1.show(); } } /* Ex73.java:35: シンボルを解決できません。 シンボル: 変数 course 場所 : Teacher の クラス System.out.println("担当科目は" + course + "です。"); ^ Ex73.java:47: シンボルを解決できません。 シンボル: メソッド setCourse (java.lang.String) 場所 : Student の クラス human1.setCourse("java"); */ このプログラムは TeacherクラスでHumanクラスのshow()メソッドをオーバーライドすると言うものです。 どなたかよろしくお願いします。

    • ベストアンサー
    • Java
  • 10の302乗の計算またはDoubeのキャストについて教えて下さい。

    java言語で質問があります。よろしくお願い致します。 次のプログラムを作成し、2点質問をさせて下さい。 まずは10の302乗を計算したいときとキャストを調べたところdouble型はできないのでどう対処すればいいでしょうか。どうぞアドバイス下さい。class Enzanshi{ public static main(String args[]){ int num1; double num = num1*10^302; } } エラー内容はこうです。 C:\java>javac Enzanshi.java Enzanshi.java:2: メソッドの宣言が不正です。戻り値の型が必要です。 public static main(String args[]){ ^ Enzanshi.java:3: \65307 は不正な文字です。 int num1; ^ Enzanshi.java:4: \65307 は不正な文字です。 double num = num1*10^302; ^ エラー 3 個

  • コンパイル時のエラーについて

    Java超初心者の者です。 下記のコードどこか間違っていますか? class Sample4 { public static void main(String args[]) throws IOException { System.out.println("いくつまでの合計を求めますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int sum = 0; for(int i=1; i<=num; i++){ sum += i; } System.out.println("1から" + num + "までの合計は"      + sum + "です。"); } } テキスト通りに入力したつもりなのに何度確認して入力し直しても、 『'class'または'interface'がありません。』というエラーが 出てしまうのですが・・・ 色々ネットで検索して調べたのですが、分らなくて。

    • ベストアンサー
    • Java
  • 拡張for文の型変換について

    Javaでプログラミングを勉強しております。 拡張for文で変数宣言をする時についての質問です。 argsに数字を入れてString型をInt型に変換する時、変数宣言はどう書けばいいのでしょうか? 拡張for文に入れる前に Int num = Integer.parseInt(args[0]); と宣言してから for(int num : array){ 処理 } とするのか for(int num : array){ num = Integer.parseInt(args[0]) …ほかの処理 } みたいにfor文の中に埋め込むのか分かりません。 argsのString型を拡張for文でInt型にするにはどう書いたらいいでしょうか

  • 現在学校のjavaの課題電卓を作っています

    import java.io.*; class dentaku { public static void main(String[] args)throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); System.out.print("式を入力"); String input = r.readLine(); String sum[] = new String[input.length()]; String number = ""; int s = 0; int goukei =0; char enzan = ' '; for(int i=0; i < input.length(); i++) { //System.out.print(str[i]); //文字列から1文字ずつ抽出 char num = input.charAt(i); if(i == input.length()-1) { sum[s] = number; } else { if(num == '+' || num == '-'|| num == '*'|| num == '/') { //配列sumに代入 sum[s] = number; s++; sum[s] = String.valueOf(num); s++; } else { //変数numberにnumを代入 number = number + num; } } } for(int j=0; j<sum.length; j++) { if(sum[j] == null) { break; } if(j == 0) { goukei = Integer.parseInt(sum[j]); } else { if(sum[j].equals("+") || sum[j].equals("-")|| sum[j].equals("*")|| sum[j].equals("/")) { enzan = sum[j].charAt(0); } else { switch(enzan) { case '+': goukei += Integer.parseInt(sum[j]); break; case '-': goukei -= Integer.parseInt(sum[j]); break; case '*': goukei *= Integer.parseInt(sum[j]); break; case '/': goukei /= Integer.parseInt(sum[j]); break; } } } } System.out.print(goukei); } } までできたのですが 実行し 実際に 1+1+1とうってみると答えが23になってしまいます。 どのようにしたらいいのでしょうか

    • ベストアンサー
    • Java
  • javaで1.8x10の308乗÷(ー1.8x10の308)乗割り算をしたいです。

    java初心者です。下記の割り算するプログラムが できません。ご指導下さい。実行結果はコメントどめ しました。 /*num1=1.8x10^308,num2=1.8x10^308としnum1/num2,(-num1)÷(-num2)、num1/0を計算する。 実行結果 C:\keisanclass>java WarizanMain 1.8 1.8 NaN 演算不可能と表示されました。 C:\keisanclass>java WarizanMain -1.8 -1.8 NaN 演算不可能と表示されました。 C:\keisanclass>java WarizanMain 1.8 0 Infinity 無限大と表示されました。 */ class WarizanMain { public static void main(String args[]) { double num1=0.0; double num2=0.0; num1=Double.parseDouble(args[0]); num2=Double.parseDouble(args[1]); double z = Math.pow(10,308); System.out.println((num1*z)/(num2*z)); } }

    • ベストアンサー
    • Java

専門家に質問してみよう