javaで判別式のプログラミングを作りたい

このQ&Aのポイント
  • javaで二次方程式の解を判別するプログラムを作成したが、正しい結果が出ない
  • 実行結果が異なる問題が発生している
  • 正しくは実数の重解を持つはずだが、実数解を持たないと出力されている
回答を見る
  • ベストアンサー

javaで判別式のプログラミングを作りたいのですが

javaで二次方程式ax2+bx+c=0が,2つの異なる実数解をもつ,実数の重解をもつ,実数解をもたないのいずれであるかを判別するプログラムを作りたいのですが、 何度実行しても正しい答えが出てくれません。なぜでしょうか? import java.util.Scanner; class Kadai { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int a,b,c,d; System.out.println("二次方程式y=ax^2+bx+cの解を判別します。"); System.out.print("aを入力してください。:"); a = sc.nextInt(); System.out.print("bを入力してください。:"); b = sc.nextInt(); System.out.print("cを入力してください。:"); c = sc.nextInt(); d=b^2-4*a*c; System.out.println("y="+a+"x^2+"+b+"x+"+c+"の判定は以下の通りです。"); if(d>0){ System.out.println("判別式D>0"); System.out.print("2つの異なる実数解をもつ。"); } if(d==0){ System.out.println("判別式D=0"); System.out.print("実数の重解をもつ。"); } if(d<0){ System.out.println("判別式D<0"); System.out.print("実数解をもたない。"); } } } これを実行すると下の画像のように異なる結果が出てしまいます。 この場合、正しくは実数の重解を持つですよね? どこが間違っているか指摘してくださると嬉しいですm(_ _)m

この投稿のマルチメディアは削除されているためご覧いただけません。
  • Java
  • 回答数3
  • ありがとう数6

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

  • ベストアンサー
  • smilebox
  • ベストアンサー率61% (441/717)
回答No.2

> d=b^2-4*a*c; Java における ^ は、べき乗を求める演算子ではありません。

その他の回答 (2)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.3

~は2乗ではありません。 誤 d=b^2-4*a*c; 正 d=b*b-4*a*c;

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

d=b^2-4*a*c;

関連するQ&A

  • javaで公約数の個数を求めるプログラミング

    javaで二つの数字を入れるとその公約数と、その公約数の個数を表示してくれるプログラムを作りたいです。 公約数を表示してくれるプログラムは多分作れたのですが、公約数の個数を表示してくれるプログラムの作り方がどうしてもわかりません。 aを入力してください:12 bを入力してください:18 aとbは公約数として1をもちます。 aとbは公約数として2をもちます。 aとbは公約数として3をもちます。 aとbは公約数として6をもちます。 よって,aとbは公約数を4個もちます。 というように表示されるようにしたいです。 個数を求めるプログラムを教えてくださいm(_ _)m 以下が私の作った公約数を求めるプログラムです。 import java.util.Scanner; class Test{ public static void main(String args[]) { Scanner sc = new Scanner (System.in); System.out.println("aとbの各公約数と、その全体の個数を調べます。"); System.out.print("aを入力してください:"); int a=sc.nextInt(); System.out.print("bを入力してください:"); int b=sc.nextInt(); if(a<b){ for(int i=1;i<=a;i++) if((a%i==0)&&(b%i==0))System.out.println(a+"と"+b+"は公約数として"+i+""+"をもちます"); } if(b<a){ for(int i=1;i<=b;i++) if((a%i==0)&&(b%i==0))System.out.println(a+"と"+b+"は公約数として"+i+""+"をもちます"); } } }

    • ベストアンサー
    • Java
  • javaプログラミングについて!

    ただいまjavaプログラミングの勉強をしております。 そこで数字を複数回入力させ、-1を入力すると終了し、その数字の最大、最小、平均を出力するプログラムを作っているのですが、 public static void main(String[] args) { int max = 0; int min = 100; int sum = 0; int count = 0; Scanner sc = new Scanner(System.in); System.out.println("正の整数を入力してください"); int n = sc.nextInt(); while (num01 != -1){ System.out.println("正の整数を入力してください"); sum += n; n = sc.nextInt(); count++; if(max < n) max = n; if(min > n) min = n; } System.out.println("入力された整数の最大は" + max); System.out.println("入力された整数の最小は" + min); System.out.println("入力された整数の平均は" + sum/count); } } このようなプログラミングが作れたのですが、たとえば30と10を入力したときに 最大10 最小-1 平均20 と表示されてしまいます。色々試行錯誤してみたのですが、改善されなかったため質問させて頂きました。原因と解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 3つの値の中間値を求める

    import java.util.Scanner; //このコードをどう修正したらいいですか? class Sample7_3{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数a:");int a = std.nextInt(); System.out.print("整数b:");int b = std.nextInt(); System.out.print("整数c:");int c = std.nextInt(); int med = 0; if(a<b) else if(a<c)med = c; else if(b<c)med = b; System.out.println("中間値は"+med+"です。"); } }

  • へロンの公式 java

    たびたびどうもですw 以下のプログラミングをjavaで書くには、どうすればよいでしょうか? 三角形ABCの3辺の長さa, b, cを読み込んで、へロンの公式 s = √p(p-a)(p-b)(p-c) ここに、p = (a+b+c)/2によって面積sを計算して出力するプログラムを作りなさい。ただし、3辺の長さを一度に読み込み、そのうちいずれかがゼロ以下であるか、またはa<b+c, b<c+a, c<a+bのいずれかが満たされていない場合には、警告を表示して実行を停止するものとする。なお、(1)書式無し、(2)小数点以下5桁、全幅10桁の固定小数点、(3)仮数部小数点以下5桁、全幅14桁の浮動小数点の3通りの書式で続けて出力させるものとする。 実行例; 三角形の3辺の長さを入力しなさい;2.5 2 1.5 三角形の面積は1.5です 三角形の面積は 1.50000です 三角形の面積は 1.50000e+00です ちなみに自分でここまでやってみました。どこが違うのでしょうか? import java.util.Scanner; class Mondai { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("三角形の3辺の長さを入力>"); double a = stdIn.nextInt(); double b = stdIn.nextInt(); double c = stdIn.nextInt(); double p = (a + b + c)/2; s = Math.sqrt(p * (p - a) * (p - b) * (p - c)); double s = stdIn.nextInt(); if (0 > a) System.out.println("警告します.実行を停止してください."); else if (0 > b) System.out.println("警告します.実行を停止してください."); else if (0 > c) System.out.println("警告します.実行を停止してください."); else if ((b + c > a) && (c + a > b) && (a + b > c)) System.out.printf("三角形の面積は%3dです. \n", s); System.out.printf("三角形の面積は%10fです. \n", s); else System.out.println("警告します.実行を停止してください."); } }

  • [至急!]Javaのプログラミング

    野球のBSOカウンタを作ろうとしているのですが、エラーが出ないもののうまく動きません。動作としてはsと入力したらSのカウンタに「〇」を表示、といったことをO(アウト)カウンタが3つになるまで行うプログラムなのですが、入力と出力の両方をうまくループすることが出来ません。分かる方がいたら教えてください。私が作ったものは下のものです。これを改良して作っていただけると助かります。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //String str=br.readLine(); //char hantei=str.charAt(0); int sc=0,bc=0,oc=0; while(oc<3){ String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s') { sc=sc+1; if(sc==3) oc=oc+1; sc=0; bc=0; } else if(hantei=='b') { bc=bc+1; if(bc==4) sc=0; bc=0; } else if(hantei=='o') { oc=oc+1; sc=0; bc=0; } else { System.out.println("入力が違います。"); } } System.out.print("B "); for(int i=0;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=0;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=0;i<=oc;i++){ System.out.print("〇"); } System.out.println(""); } } 出力例 s(入力) B S 〇 O s(入力) B S 〇〇 O s(入力) B S O 〇 これをアウトカウントが3つになるまで行うプログラムです。

    • ベストアンサー
    • Java
  • javaに関する質問

    n個の整数値を入力し、それらの値を昇順に並べ替えるプログラムを書いたのですがエラーにより問題が発生しました。 問題は下記の実行例のように数字を,で区切り入力すると、エラーが発生し結果が表示されないという問題です。(Enterで改行するように区切ればエラーなく実行されます) 実行例として 整数値を入力してください。 1,5,7,3 ← 手入力部分 1,3,5,7 ← 実行結果 となれば正解のようです。 これが僕の書いたコードです。 package jp.javadrive; import java.util.Arrays; import java.util.Scanner; public class Java { public static void main(String[] args) { System.out.println("整数値を入力してください。"); @SuppressWarnings("resource") Scanner a = new Scanner(System.in); @SuppressWarnings("resource") Scanner b = new Scanner(System.in); @SuppressWarnings("resource") Scanner c = new Scanner(System.in); @SuppressWarnings("resource") Scanner d = new Scanner(System.in); int a1 = a.nextInt(); int b1 = b.nextInt(); int c1 = c.nextInt(); int d1 = d.nextInt(); int[] arr = new int[]{a1,b1,c1,d1}; Arrays.sort(arr); for(int i = 0;i < arr.length;i++) System.out.print(arr[i]); } } 初めてjavaを触った為、ググりながら書いていたので仕組みを分かっていないところがあるので、間違っている箇所があればどしどしご指摘お願いします。

    • ベストアンサー
    • Java
  • 判別式の過程について

    これで合ってますか? ax^2+6x+a-8=0 判別式をDとおく。 D=36-4(a-8)・a  =36-4a^2+32a  =-4a^2+32a+36  =(a-9)(a+4) D>0すなわち-1<a<0、0<a<9のとき異なる2つの実数解 D=0すなわちa=-1、9のとき重解 D<0すなわちa<-1、9<aのとき異なる2つの虚数解 a=0のとき方程式は6x-8=0となり、1つの実数解 時間のある方、ご回答宜しくお願いします。

  • 実数係数4次方程式の判別式

    http://www004.upp.so-net.ne.jp/s_honma/polynomial/discriminant.htm を参照して、判別式について考えています。 そこでの、普通の意味での判別式は、 D = a_0^2(n-1)Π( αi - αj )^2 で、 D=0⇔多項式 F(X) (または、方程式 F(X)=0 )は、重根をもつ です。 2次においては、 D>0ならば、2つの相異なる実数解をもつ D<0ならば、2つの相異なる虚数解をもつ D=0ならば、実数の2重解をもつ 3次においては、 D>0ならば、3つの相異なる実数解をもつ D<0ならば、1つの実数解と2つの虚数解をもつ D=0とする。p=q=0ならば、3重解(解は0のみ)をもつ        pq≠0 ならば、 3つの実数解(2重解とその他の解)をもつ のように、2次や3次に限っては、判別式Dの正負または0の値によって明確に分類されます。 では、4次方程式の場合にはどうなるでしょうか? たとえば、相異なる実数解を4個もつ条件は何でしょうか? (極大値が正、極小値が負という条件を考えましたが、微分した3次方程式を解くことになるし、結果もきれいにならないだろうし、また、より一般には、5次方程式は解けないし、なにか別のいい方法を知りたいと思っています。)

  • 二次方程式の解の判別

    御世話になっております。 二次方程式 x^2+ax-a-2=0の解の判別です。但し、aは実数とします。 判別式=Dとして、D=b^2-4acですから、この式のD=a^2-4(-a-2)=a^2+4a+8になると思います。aは実数ですから、Dも実数(なハズ) と筋道たてましたが、解の判別の定義から、解を判別するのが出来ません。解の判別について、Dが実数か複素数かは関係無いですよね?(数II時点) しかし、回答をみたところ、この方程式の解は「実数解」でした。 aの場合の数について考えて、不等式の要領で解く方法は分かるのですが、回答のように特定できる考え方が解りません。お解りになる方のアドバイスをお待ちしております。

  • Javaのネットワークに関して

    一つのサーバから複数のクライアントにメッセージを送るようにしなさい。いくつのクライアントと接続するか は入力により動的に決めるようにすること。複数のクライアントとの通信にはそのソケットを配列やコンテナを使って実装すればよい。サ ーバを「No23ex04Server」としクライアントを「No23ex04Client」とすること。 とあります。 以下のコードでクライアント側のプログラムは一切変えなくてよいそうなので、サーバー側のプログラムを以下のようにしたのですが、acceptが呼ばれている時点で、ループが止まってしまうので、入力待機状態になりません。スレッドを使わなくてもできるそうなのですが、私にはさっぱりです。 public class No23ex04Client { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String cIpAddress = null; String hostName = null; String sIpAddress = null; int portNo = 65535; try { cIpAddress = InetAddress.getLocalHost().getHostAddress(); hostName = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { } System.out.println("Client IP Address : " + cIpAddress); System.out.println("Host Name : " + hostName); Scanner scn = new Scanner(System.in); System.out.print("Server IP Address? : "); sIpAddress = scn.next(); System.out.print("Server Port Number? : "); portNo = scn.nextInt(); System.out.println("■Start■"); try { Socket sc = new Socket(sIpAddress, portNo); BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream())); while (true) { System.out.print("From Server Message : "); String fromServerMessage = br.readLine(); System.out.println(fromServerMessage); if (fromServerMessage.contains("さようなら")) break; } sc.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("■Shutdown■"); } } public class No23ex04Server { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String ipAddress = null; String hostName = null; int portNo = 65535; try { ipAddress = InetAddress.getLocalHost().getHostAddress(); hostName = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e){ } System.out.println("IP Address : " + ipAddress); System.out.println("Host Name : " + hostName); Scanner scn = new Scanner(System.in); System.out.print("Port Number? : "); portNo = scn.nextInt(); System.out.print("Socket Number? : "); int num = scn.nextInt(); System.out.println("■Start■"); try { ServerSocket ssc = new ServerSocket(portNo); System.out.println("Serverが起動(Port Number : " + ssc.getLocalPort() + ")"); Socket[] sc = new Socket[num]; BufferedWriter[] bw = new BufferedWriter[num]; for (int i = 0; i < num; i++) { sc[i] = ssc.accept(); System.out.println("接続" + i + " : " + sc[i].getRemoteSocketAddress()); bw[i] = new BufferedWriter(new OutputStreamWriter(sc[i].getOutputStream())); } while (true) { System.out.print("To Client Message : "); String toClientMessage = scn.next(); for (BufferedWriter b : bw) { b.write(toClientMessage); b.newLine(); b.flush(); } if (toClientMessage.contains("さようなら")) break; } for (Socket s : sc) s.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("■Shutdown■"); } }

    • ベストアンサー
    • Java