• 締切済み

以下のクラスで"2/3"のように「/」の前が分子、後が分母となるような

以下のクラスで"2/3"のように「/」の前が分子、後が分母となるような分数で初期化するにはどうすればいいですか? class Bunsu { final static Bunsu ZERO=new Bunsu(0,1); final static Bunsu ONE=new Bunsu(1,1); int bunshi; int bunbo; Bunsu() {} Bunsu (int s,int b) {set(s,b);} void set(int x,int y) { bunshi=x; bunbo=y; int w=gcd(bunshi,bunbo); bunshi=bunshi/w; bunbo=bunbo/w; } static int gcd(int x,int y) { while (y!=0) { int r=x % y; x=y; y=r; } return x; } double jissuChi() { return (double)bunshi/bunbo; } Bunsu seki(Bunsu x) { int s=bunshi*x.bunshi; int b=bunbo*x.bunbo; return new Bunsu(s,b); } Bunsu wa(Bunsu x) { int s=bunshi*x.bunbo+x.bunshi*bunbo; int b=bunbo*x.bunbo; return new Bunsu(s,b); } public String toString() { return bunshi+"/"+bunbo; }

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

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

(1)文字列を引数とするコンストラクタを作る (2)"/"でsplitする (3)分割された文字列をそれぞれparseIntで数値化する 途中、splitで分割数が2以外、あるいはparseIntでの 例外検出があれば、例外をスローします。 現コンストラクタで、(0,0)を引数にするとゼロ除算に なるような気がします。

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

そのようなコンストラクタを作ってください.

関連するQ&A

  • 以下のクラスに整数型の引数一つを持つコンストラクタを付け加えたものを作

    以下のクラスに整数型の引数一つを持つコンストラクタを付け加えたものを作ってください Bunsu(int x)分子をx、分母をyとする分数で初期化してください class Bunsu { final static Bunsu ZERO=new Bunsu(0,1); final static Bunsu ONE=new Bunsu(1,1); int bunshi; int bunbo; Bunsu() {} Bunsu (int s,int b) {set(s,b);} void set(int x,int y) { bunshi=x; bunbo=y; int w=gcd(bunshi,bunbo); bunshi=bunshi/w; bunbo=bunbo/w; } static int gcd(int x,int y) { while (y!=0) { int r=x % y; x=y; y=r; } return x; } double jissuChi() { return (double)bunshi/bunbo; } Bunsu seki(Bunsu x) { int s=bunshi*x.bunshi; int b=bunbo*x.bunbo; return new Bunsu(s,b); } Bunsu wa(Bunsu x) { int s=bunshi*x.bunbo+x.bunshi*bunbo; int b=bunbo*x.bunbo; return new Bunsu(s,b); } public String toString() { return bunshi+"/"+bunbo; } よろしくお願いします(>_<)

  • 以外のクラスに分数同士の比較を行うメソッドを追加してください

    以外のクラスに分数同士の比較を行うメソッドを追加してください 自身(this)の分数よりxが小さい場合は1を値とし、xのほうが大きい場合は-1、等しい場合は0を値とする class Bunsu { final static Bunsu ZERO=new Bunsu(0,1); final static Bunsu ONE=new Bunsu(1,1); int bunshi; int bunbo; Bunsu() {} Bunsu (int s,int b) {set(s,b);} void set(int x,int y) { bunshi=x; bunbo=y; int w=gcd(bunshi,bunbo); bunshi=bunshi/w; bunbo=bunbo/w; } static int gcd(int x,int y) { while (y!=0) { int r=x % y; x=y; y=r; } return x; } double jissuChi() { return (double)bunshi/bunbo; } Bunsu seki(Bunsu x) { int s=bunshi*x.bunshi; int b=bunbo*x.bunbo; return new Bunsu(s,b); } Bunsu wa(Bunsu x) { int s=bunshi*x.bunbo+x.bunshi*bunbo; int b=bunbo*x.bunbo; return new Bunsu(s,b); } public String toString() { return bunshi+"/"+bunbo; }

  • 有理数の演算についてなんですが。。

    #include <stdio.h> typedef struct{ int bunshi; int bunbo; }rat; rat rat_num(int x,int y){ rat r; r.bunshi=x; r.bunbo=y; return(r); } void rat_print(rat x){ printf("%d/%d,"x.bunshi,x.bunbo); } int gcd(int n, int m) { int res; res = n % m; if (res == 0) return m; return gcd(m, res); } rat rat_normalize(rat x){//ここです** } rat rat_plus(rat x, rat y){ //足し算 } int main() { rat x={1,3}; rat y={3,4}; rat z; z=rat_plus(x,y); printf("1/3+3/4= ");rat_print(z);printf("\n"); } 分数の足し算のプログラムをつくりたくてだいたいのそと枠はできたのですが int gcd(int n, int m)のところではnとmの最大公約数を求めるものでたぶんここはできていると思うのですが、rat rat_normalize(rat x)のところでxを約分して返す。(x.bunshiとx.bunboをそれらの最大公約数で割る)っていうことをしたいんですけど、構造体を勉強しはじめたばかりでどのように書いたらよいかわかりません。教えてください。 rat rat_plus(rat x, rat y){ //足し算 }のところはそこがわかればできそうなので大丈夫です!! お願いします><

  • 複素数の計算するクラスを足せる人がもしいたら

    このJavaプログラムはAdd(足し算)とSud(引き算)を計算するプログラムです。 import Java.io.*; class INT { public int Add(int x,int y){ return x+y; } public int Sub(int x,int y){ return x-y; } } class REAL extends INT { public double Add( double x,double y){ return x+y; } public double Sub( double x,double y){ return x-y; } } class CAL extends REAL { } … public class Cale { public static void main(String args[]) { CAL c = new CAL(); System.out.println( c.Add(1,2) ); System.out.println( c.Add(1.0,2.0)); System.out.println( c.Sub( 1,2)); System.out.println( c.Sub( 1.0,2.0)); } } このプログラムに「複素数の足し算と引き算をするクラス」をクラスの仕様も併せて 作成することが出来る人がもしいたら宜しくおねがいします☆

  • javaのプログラムについて

    質問させていただきます // 数値積分 class Integral1 { public static void main(String[] args) { final int n = 100; // 区間数 final double a = 0; // 始点 final double b = 1; // 終点 final double h = (b-a) / n; // 区間の幅 double x, y; double S = 0; // Sを0で初期化 int i; // 区間 for(i = 1; i <= n ; i++) { // 区間1からnまで x = a + h * i; // 区分積分 y = Math.sqrt(1-x*x); // yを計算 S += y * h; } System.out.println("S = " + S + " 4S = " + 4*S); } } これは区分積分法で計算する数値積分のプログラムなのですが、 これをシンプソン法に改造したプログラムに直していただきたいのですが・・・ どなたかお願いします

  • クラス内にnewで形成した配列等が含まれる場合

    クラスを関数内に作成した時にそれを実体コピーさせるreturnで返したいんですが、class内newで形成した動的配列があるため、返した後デストラクタが呼ばれるので動的配列の中身が消滅してしまう(させている)のですが、動的配列の消去にデストラクタを使用しないようにするしかありませんか? class a{ public: int *b; a(){b=new int[10];} ~a(){delete b;} //エラー原因 a operator+(a &s){a c;c.b[0] = b[0] + s.b[0];return c;} }; void main() {a x,y;y = x + x;}

  • C#のプログラミングについて(基礎・・)

    どうしても エラーが出ます エラーの表示は 下のようなものなのですが、どういう意味かわかりません。 C:\Documents and Settings\gc60117\デスクトップ\Project3\CodeFile1.cs(20): 引数を '2' 個指定できる、メソッド 'Vector' のオーバーロードはありません。  自分なりのプログラミングデータを記述します。 間違いを指摘していただけると助かります。 using System; class Vector { private double x; private double y; public double Length { get{return Math.Sqrt(x*x+y*y);} } public void Write() { Console.Write("({0},{1})",x,y); } public static Vector I { get{return new Vector(1,0);} } public static Vector J { get{return new Vector(0,1);} } public static Vector operator*(double k,Vector a) { Vector t= new Vector(); t.x=k*a.x; t.y=k*a.y; return t; } public static double operator*(Vector a, Vector b) { double z= new double(); z=a.x*b.x+a.y+b.y; return z; } public static Vector operator+(Vector a,Vector b) { Vector u=new Vector(); u.x=a.x+b.x; u.y=a.y+b.y; return u; } public static double Angle(Vector A,Vector B) { double r=new double(); r=A*B/(A.Length*B.Length); r=Math.Acos(r); r=r/6.28*360; return r; } } class kadai53 { static void Main() { Vector A; double x, y; Console.Write("ベクトルAの成分を入力してください\n"); Console.Write("x成分は ? "); x = double.Parse(Console.ReadLine()); Console.Write("y成分は ? "); y = double.Parse(Console.ReadLine()); A = x * Vector.I + y * Vector.J; //静的プロパティと,一つ目の*演算子,+演算子の呼び出し Console.Write("A = "); A.Write(); Vector B = new Vector(0, 1); Console.Write("\nB = "); B.Write(); Console.WriteLine("\nベクトルAとベクトルBの内積の値は{0}です", A*B);//二つ目の*演算子の呼び出し Console.Write("ベクトルAとベクトルBがなす角度は{0}度です\n", Vector.Angle(A,B)); } }

  • クラスメソッドのみのクラスのオブジェクト生成は不可??

    あるテキストのjavaの問題です。 public class Draw{   static void pixel(int x,int y){     /*座標(x、y)に点を描画*/   }   static void line(int x1,int y1,int x2,int y2){     /*座標(x1、y1)~(x2、y2)に線を引く*/   } } で、これを実行するための以下のようなクラス public class TestDraw{ <ここに入力> } という問題なのですが2つまでは絞れたのですが、 (1) public static void main(String args[]){   Draw d = new Draw().line(10,10,20,30); } ↑× (2) public static void main(String args[]){   Draw.line(10,10,20,30); } ↑○ (2)はlineメソッドがstaticメソッドだからオブジェクト生成しなくても良い、ということなんですが (1)も正解のような気がするのですが・・・ 解説によると「lineはvoidなのでnew Draw().line(10,10,20,30);とすれば正解、とあります。 どうもいまいち理解できません。 クラスメソッドはオブジェクト生成しなくとも良い→オブジェクト生成できない ということなのでしょうか? それからちなみに、public classって2つ記述できないんではありませんでしたか?

    • ベストアンサー
    • Java
  • C#のインクリメント演算子のオーバーロード(前置きと後置き)

    インクリメント演算子をオーバーロードして、後置きインクリメントの場合に戻り値が演算前の結果を返すようにする方法はありませんか? class Sample {  public int x;  public int y;  public Sample(int x, int y)  {   this.x = x;   this.y = y;  }  public override string ToString()  {   return base.ToString() + " - x = " + x + ", y = " + y;  }  public static Sample operator ++()  {   x++; y++;   return this;  } } class EntryPoint {  public static void Main()  {   Sample sample = new Sample(1, 2);   // 「Sample - x = 2, y = 3」で、期待通り   Console.WriteLine(++sample);   // 「Sample - x = 3, y = 4」で、期待したのはインクリメントされる前の値である「「Sample - x = 2, y = 3」   Console.WriteLine(sample++);  } }

  • java 加減乗除の組み合わせを探すプログラム

    javaで(((1□9)△1)○9)==10となるような加減乗除の組み合わせを探すプログラムを考えています。 (□,△,○)はそれぞれ+,-,*,/のいずれかです。 まず分数を表すクラスFractionを作りました。 public class Fraction{ private int nume, deno;//numeが分子,denoが分母 //初期化 public Fraction() { nume = 0; deno = 1; } //整数の場合 public Fraction(int n){ nume = n; deno = 1; } //整数でない場合 public Fraction(int n, int d){ nume = n; deno = d; } //最大公約数を求める static int gcd(int nume, int deno){ if(deno == 0){ return nume; } else return gcd(deno, nume % deno); } //分数の足し算 public static Fraction add(Fraction v1, Fraction v2) { Fraction w = new Fraction(); w.nume = v1.nume*v2.deno+v2.nume*v1.deno; w.deno = v1.deno*v2.deno; //約分 int gcd = gcd(w.nume, w.deno); w.nume = w.nume / gcd; w.deno = w.deno / gcd; return w; } //分数の引き算 public static Fraction sub(Fraction v1, Fraction v2) { Fraction w = new Fraction(); w.nume = v1.nume*v2.deno-v2.nume*v1.deno; w.deno = v1.deno*v2.deno; int gcd = gcd(w.nume, w.deno); w.nume = w.nume / gcd; w.deno = w.deno / gcd; return w; } //分数の掛け算 public static Fraction mult(Fraction v1, Fraction v2) { Fraction w = new Fraction(); w.nume = v1.nume*v2.nume; w.deno = v1.deno*v2.deno; int gcd = gcd(w.nume, w.deno); w.nume = w.nume / gcd; w.deno = w.deno / gcd; return w; } //分数の割り算 public static Fraction div(Fraction v1, Fraction v2) { Fraction w = new Fraction(); w.nume = v1.nume*v2.deno; w.deno = v1.deno*v2.nume; int gcd = gcd(w.nume, w.deno); w.nume = w.nume / gcd; w.deno = w.deno / gcd; return w; } //分子を呼び出す int getNume() { return nume; } //分母を呼び出す int getDeno() { return deno; } } ここからが今困っていることなのですが、条件に合うような加減乗除を探すプログラムが作れず行き詰っています。 一応少し作ったのが次のクラスTestです(不完全です)。 public class Test { public static void main(String[]args){ Fraction v0 = new Fraction(1); Fraction v1 = new Fraction(9); Fraction v2 = new Fraction(1); Fraction v3 = new Fraction(9); //0=[+],1=[-],2=[*],3=[/] for (int i = 0; i < 4; i++) { switch(i) { case 0: v0 = Fraction.add(v0,v1); break; case 1: v0 = Fraction.sub(v0,v1); break; case 2: v0 = Fraction.mult(v0,v1); break; case 3: v0 = Fraction.div(v0,v1); break; } } } } ↑の調子で作っていくとどうしても4^3=64通りすべて書くことになり面倒です。上手くループを使えないでしょうか? どなたか教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう