import java.util.Scanner; public class IntAndFraction { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int a=sc.nextInt(); int b=sc.nextInt(); boolean sign=((a>0&&b<00)||(a<0&&b>0))?true:false; if(Math.abs(a)>=Math.abs(b)&&a%b==0) { System.out.println(""+a+"/"+b+"="+(a/b)); } else if(Math.abs(a)<Math.abs(b)) { System.out.println(""+a+"/"+b+"="+(new Fraction(a,b))); } else { System.out.println(""+a+"/"+b+"="+(a/b)+(sign?"":"+")+(new Fraction(a%b,b))); } } }class Fraction { private int c; private int d; public Fraction() //默认构造函数,分子分母都为1。 { c=1; d=1; } public Fraction(int a,int b) //带参数构造函数,判断分母是否为0。 { if(b==0) { System.out.println("分母 不能为0!"); System.exit(0); } c=a; d=b; selfTrim(); } public int getNumerator() { return c; } public int getDinominator() { return d; } public void selfTrim() { int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。 c=c/maxCommon; //分式为最简。 d=d/maxCommon; //整理正负号。 if((c>0&&d<0)||(c<0&&d<0)) { c=-c; d=-d; } } public String toString() //重写tostring(). { if(c==0||d==1) //分母为1 直接输出分子. { return Integer.toString(c); } return Integer.toString(c)+"/"+Integer.toString(d); //输出c/d. } //计算2个数的最大公约数。按绝对值计算。 public int commonDivisor(int x,int y) //计算2个数的最大公约数。按绝对值计算。 { if(x==0||y==0) { return 1; } int x1; int y1; x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y); //使x1>y1. y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x); int z=1; while(z!=0) { z=x1%y1; x1=y1; y1=z; } return x1; }
为什么我的主方法里的第二条else if System.out.print(""+a+"/"+b+"="+(new Fraction(a,b))); 的new Fraction(a,b)报错? No enclosing instance of type 真分数函数 is accessible. Must qualify the allocation with an enclosing instance of type 真分数函数 (e.g. x.new A() where x is an instance of 真分数函数).
由于LZ需求是俩自然数,在下就不作负数相关处理了: public static void main(String[] args) { int m, n; Scanner input = new Scanner(System.in); try { // 输入两个自然数 do { System.out.print("m="); m = input.nextInt(); } while (m <= 0); do { System.out.print("n="); n = input.nextInt(); } while (n <= 0); System.out.printf("%d/%d=", m, n); if (m / n != 0) System.out.print(m / n); if (m % n != 0) { int g = gcd(m, n); System.out.printf("+%d/%d\n", m % n / g, n / g); } } catch (Exception ex) { ex.printStackTrace(); } } // 辗转相除法(最大公约数) static int gcd(int m, int n) { if (m < n) { m ^= n; n ^= m; m ^= n; } while (n != 0) { int t = m; m = n; n = t % m; } return (m); }
这个也是小学算术的内容了哈。 仅供参考:package com.codetest.test;import java.util.Scanner;public class MathTest { public static void main(String[] args) { // int m, n; int n; Scanner input = new Scanner(System.in); try { // // 输入两个自然数 // System.out.print("m="); // // m = input.nextInt(); // // do { // System.out.print("n="); // // n = input.nextInt(); // } while (n == 0); // // System.out.printf("%d/%d=", m, n); // // if (n < 0) { // m = -m; // n = -n; // } // // display(m, n); // 输入个数 System.out.print("数据个数:"); do { n = input.nextInt(); } while (n <= 0); int c = (n >> 1) + ((n & 1) > 0 ? 1 : 0); int a[] = new int[c], b[] = new int[c]; // 输入数据 for (int i = 0, l = n >> 1; i < l; i++) { System.out.printf("请输入分子%d:", i + 1); a[i] = input.nextInt(); do { System.out.printf("请输入分母%d:", i + 1); b[i] = input.nextInt(); } while (b[i] == 0); } if ((n & 1) > 0) { System.out.printf("请输入分子%d:", (n >> 1) + 1); a[n >> 1] = input.nextInt(); b[n >> 1] = 1; } // 输出及调整数据 for (int i = 0; i < c; i++) { if (b[i] < 0) { a[i] = -a[i]; b[i] = -b[i]; } if (b[i] == 1) System.out.printf(i > 0 ? "+%d" : "%d", a[i]); else System.out.printf(i > 0 ? "+%d/%d" : "%d/%d", a[i], b[i]); } System.out.print('='); int sumA = 0, sumB = 1; // 将所有分数整合成一假分数 for (int i = 0; i < c; i++) { for (int j = 0; j < c; j++) if (i != j) a[i] *= b[j]; sumA += a[i]; sumB *= b[i]; } // 输出结果 display(sumA, sumB); } catch (Exception ex) { ex.printStackTrace(); } } // 输出结果 static void display(int m, int n) { if (m / n != 0) System.out.print(m / n); if (m % n != 0) { int g = gcd(Math.abs(m), n); System.out.printf("%+d/%d\n", m % n / g, n / g); } } // 辗转相除法(最大公约数) static int gcd(int m, int n) { if (m < n) { m ^= n; n ^= m; m ^= n; } while (n != 0) { int t = m; m = n; n = t % m; } return (m); } }
整理了一下,参考一下:import java.util.Scanner; public class IntAndFraction1 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入第一个分式的分子:"); int a=sc.nextInt(); int b=1; do { System.out.println("请输入第一个分式的分母(不可为零!):"); }while((b=sc.nextInt())==0); System.out.println("请输入第二个分式的分子:"); int c=sc.nextInt(); int d=1; do { System.out.println("请输入第二个分式的分母(不可为零!):"); }while((d=sc.nextInt())==0); Fraction fraction_ab=new Fraction(a,b); System.out.println("简化后第一个分式为: "+a+"/"+b+"="+fraction_ab); Fraction fraction_cd=new Fraction(c,d); System.out.println("简化后第二个分式为: "+c+"/"+d+"="+fraction_cd); //a/b+c/d // Fraction fraction_add=fraction_ab.plus(fraction_cd); System.out.println("("+a+"/"+b+") + ("+c+"/"+d+") = "+"("+fraction_add+")"); //a/b-c/d Fraction fraction_minus=fraction_ab.minus(fraction_cd); System.out.println("("+a+"/"+b+") - ("+c+"/"+d+") = "+"("+fraction_minus+")"); //a/b*c/d Fraction fraction_multiply=fraction_ab.multiply(fraction_cd); System.out.println("("+a+"/"+b+") * ("+c+"/"+d+") = "+"("+fraction_multiply+")"); //(a/b)/(c/d) if(fraction_cd.getNumerator()!=0) //第二个分式的分子为零,不做除法运算。 { Fraction fraction_divide=fraction_ab.divide(fraction_cd); System.out.println("("+a+"/"+b+") / ("+c+"/"+d+") = "+"("+fraction_divide+")"); } } }class Fraction { private int c; private int d; public Fraction() //默认构造函数,分子分母都为1。 { c=1; d=1; } public Fraction(int a,int b) //带参数构造函数,判断分母是否为0。 { if(b==0) { System.out.println("分母 不能为0!"); System.exit(0); } c=a; d=b; selfTrim(); } public int getNumerator() { return c; } public int getDinominator() { return d; } public void selfTrim() { int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。 c=c/maxCommon; //分式为最简。 d=d/maxCommon; //整理正负号。 if((c>0&&d<0)||(c<0&&d<0)) { c=-c; d=-d; } } public String toString() //重写tostring(). { if(c==0||d==1) //分母为1 直接输出分子. { return Integer.toString(c); } else if(Math.abs(c)<Math.abs(d)) { return Integer.toString(c)+"/"+Integer.toString(d); } else { return c/d+(c<0?"":"+")+Integer.toString(c%d)+"/"+Integer.toString(d);//值为负,不加加号。 } } //----- plus public Fraction minus(Fraction f2) { int newNumerator=c*f2.getDinominator()-d*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //---- minus public Fraction plus(Fraction f2) { int newNumerator=c*f2.getDinominator()+d*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //----- mutiply public Fraction multiply(Fraction f2) //两个分数相乘。 { int newNumerator=c*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); }
//----- divide public Fraction divide(Fraction f2) { if(f2.getNumerator()==0) { System.out.println("0不能做除数!"); System.exit(0); } Fraction result=new Fraction(); int newNumerator=c*f2.getDinominator(); int newDinominator=d*f2.getNumerator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //计算2个数的最大公约数。按绝对值计算。 public int commonDivisor(int x,int y) //计算2个数的最大公约数。按绝对值计算。 { if(x==0||y==0) { return 1; } int x1; int y1; x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y); //使x1>y1. y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x); int z=1; while(z!=0) { z=x1%y1; x1=y1; y1=z; } return x1; } }
int j;
if (8 % 6 != 0) {
j = 8 - i * 6;
}
if (j == 0) {
system.out.println("8/6="+i+"+"+j+"/"+6);
} else {
system.out.println("8/6="+i);
}
int i = 8/6;//此时i会等于1
int j;
if (8 % 6 != 0) {
j = 8 - i * 6;
}
if (j == 0) {
system.out.println("8/6="+i);
} else {
system.out.println("8/6="+i+"+"+j+"/"+6);
}
1 设计一个分式fraction类, 它能把两个整数整理成最简分式形式,且处理正、负号. 重写toString(),使输出分式形式。
如:整数是3,6 输出1/2。
整数是-2,-6,输出1/3。
整数是2,-6,输出-1/3。(不是1/-3)。
2 设计控制台输入2个整数,分子a, 分母b, 分3重情况输出。
1) a绝对值>=b绝对值且a%b==0. 直接输出。
2) a绝对值<b绝对值,直接输出 new Fraction(a,b);
3) 输出a/b+new Fraction(a%b,b).
import java.util.Scanner;
public class IntAndFraction
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
boolean sign=((a>0&&b<00)||(a<0&&b>0))?true:false;
if(Math.abs(a)>=Math.abs(b)&&a%b==0)
{
System.out.println(""+a+"/"+b+"="+(a/b));
}
else if(Math.abs(a)<Math.abs(b))
{
System.out.println(""+a+"/"+b+"="+(new Fraction(a,b)));
}
else
{
System.out.println(""+a+"/"+b+"="+(a/b)+(sign?"":"+")+(new Fraction(a%b,b)));
}
}
}class Fraction
{
private int c;
private int d; public Fraction() //默认构造函数,分子分母都为1。
{
c=1;
d=1;
}
public Fraction(int a,int b) //带参数构造函数,判断分母是否为0。
{
if(b==0)
{
System.out.println("分母 不能为0!");
System.exit(0);
}
c=a;
d=b;
selfTrim();
} public int getNumerator()
{
return c;
}
public int getDinominator()
{
return d;
} public void selfTrim()
{
int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。
c=c/maxCommon; //分式为最简。
d=d/maxCommon;
//整理正负号。
if((c>0&&d<0)||(c<0&&d<0))
{
c=-c;
d=-d;
}
} public String toString() //重写tostring().
{
if(c==0||d==1) //分母为1 直接输出分子.
{
return Integer.toString(c);
}
return Integer.toString(c)+"/"+Integer.toString(d); //输出c/d.
} //计算2个数的最大公约数。按绝对值计算。
public int commonDivisor(int x,int y) //计算2个数的最大公约数。按绝对值计算。
{
if(x==0||y==0)
{
return 1;
}
int x1;
int y1; x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y); //使x1>y1.
y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);
int z=1;
while(z!=0)
{
z=x1%y1;
x1=y1;
y1=z;
}
return x1;
}
System.out.print(""+a+"/"+b+"="+(new Fraction(a,b))); 的new Fraction(a,b)报错?
No enclosing instance of type 真分数函数 is accessible. Must qualify the allocation with an enclosing instance of type 真分数函数 (e.g. x.new A() where x is an instance of 真分数函数).
输入3 9 4 7输出3/9+4/7=19/21 样例输入
3 2 1 6
样例输出
3/2+1/6=1+2/3
这种 又要怎样转换? 分给定你了
int m, n;
Scanner input = new Scanner(System.in); try {
// 输入两个自然数
do {
System.out.print("m="); m = input.nextInt();
} while (m <= 0); do {
System.out.print("n="); n = input.nextInt();
} while (n <= 0); System.out.printf("%d/%d=", m, n); if (m / n != 0)
System.out.print(m / n); if (m % n != 0) {
int g = gcd(m, n); System.out.printf("+%d/%d\n", m % n / g, n / g);
}
} catch (Exception ex) {
ex.printStackTrace();
}
} // 辗转相除法(最大公约数)
static int gcd(int m, int n) {
if (m < n) {
m ^= n;
n ^= m;
m ^= n;
} while (n != 0) {
int t = m;
m = n;
n = t % m;
} return (m);
}
仅供参考:package com.codetest.test;import java.util.Scanner;public class MathTest {
public static void main(String[] args) {
// int m, n;
int n; Scanner input = new Scanner(System.in); try {
// // 输入两个自然数
// System.out.print("m=");
//
// m = input.nextInt();
//
// do {
// System.out.print("n=");
//
// n = input.nextInt();
// } while (n == 0);
//
// System.out.printf("%d/%d=", m, n);
//
// if (n < 0) {
// m = -m;
// n = -n;
// }
//
// display(m, n); // 输入个数
System.out.print("数据个数:"); do {
n = input.nextInt();
} while (n <= 0); int c = (n >> 1) + ((n & 1) > 0 ? 1 : 0); int a[] = new int[c], b[] = new int[c]; // 输入数据
for (int i = 0, l = n >> 1; i < l; i++) {
System.out.printf("请输入分子%d:", i + 1);
a[i] = input.nextInt();
do {
System.out.printf("请输入分母%d:", i + 1);
b[i] = input.nextInt();
} while (b[i] == 0);
} if ((n & 1) > 0) {
System.out.printf("请输入分子%d:", (n >> 1) + 1);
a[n >> 1] = input.nextInt();
b[n >> 1] = 1;
} // 输出及调整数据
for (int i = 0; i < c; i++) {
if (b[i] < 0) {
a[i] = -a[i];
b[i] = -b[i];
} if (b[i] == 1)
System.out.printf(i > 0 ? "+%d" : "%d", a[i]);
else
System.out.printf(i > 0 ? "+%d/%d" : "%d/%d", a[i], b[i]);
} System.out.print('='); int sumA = 0, sumB = 1; // 将所有分数整合成一假分数
for (int i = 0; i < c; i++) {
for (int j = 0; j < c; j++)
if (i != j)
a[i] *= b[j];
sumA += a[i];
sumB *= b[i];
} // 输出结果
display(sumA, sumB);
} catch (Exception ex) {
ex.printStackTrace();
}
} // 输出结果
static void display(int m, int n) {
if (m / n != 0)
System.out.print(m / n); if (m % n != 0) {
int g = gcd(Math.abs(m), n); System.out.printf("%+d/%d\n", m % n / g, n / g);
}
} // 辗转相除法(最大公约数)
static int gcd(int m, int n) {
if (m < n) {
m ^= n;
n ^= m;
m ^= n;
} while (n != 0) {
int t = m;
m = n;
n = t % m;
} return (m);
}
}
public class IntAndFraction1
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个分式的分子:");
int a=sc.nextInt();
int b=1;
do
{
System.out.println("请输入第一个分式的分母(不可为零!):");
}while((b=sc.nextInt())==0);
System.out.println("请输入第二个分式的分子:");
int c=sc.nextInt();
int d=1;
do
{
System.out.println("请输入第二个分式的分母(不可为零!):");
}while((d=sc.nextInt())==0); Fraction fraction_ab=new Fraction(a,b);
System.out.println("简化后第一个分式为: "+a+"/"+b+"="+fraction_ab);
Fraction fraction_cd=new Fraction(c,d);
System.out.println("简化后第二个分式为: "+c+"/"+d+"="+fraction_cd); //a/b+c/d
//
Fraction fraction_add=fraction_ab.plus(fraction_cd);
System.out.println("("+a+"/"+b+") + ("+c+"/"+d+") = "+"("+fraction_add+")");
//a/b-c/d
Fraction fraction_minus=fraction_ab.minus(fraction_cd);
System.out.println("("+a+"/"+b+") - ("+c+"/"+d+") = "+"("+fraction_minus+")");
//a/b*c/d
Fraction fraction_multiply=fraction_ab.multiply(fraction_cd);
System.out.println("("+a+"/"+b+") * ("+c+"/"+d+") = "+"("+fraction_multiply+")");
//(a/b)/(c/d)
if(fraction_cd.getNumerator()!=0) //第二个分式的分子为零,不做除法运算。
{
Fraction fraction_divide=fraction_ab.divide(fraction_cd);
System.out.println("("+a+"/"+b+") / ("+c+"/"+d+") = "+"("+fraction_divide+")");
} }
}class Fraction
{
private int c;
private int d; public Fraction() //默认构造函数,分子分母都为1。
{
c=1;
d=1;
}
public Fraction(int a,int b) //带参数构造函数,判断分母是否为0。
{
if(b==0)
{
System.out.println("分母 不能为0!");
System.exit(0);
}
c=a;
d=b;
selfTrim();
} public int getNumerator()
{
return c;
}
public int getDinominator()
{
return d;
} public void selfTrim()
{
int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。
c=c/maxCommon; //分式为最简。
d=d/maxCommon;
//整理正负号。
if((c>0&&d<0)||(c<0&&d<0))
{
c=-c;
d=-d;
}
} public String toString() //重写tostring().
{
if(c==0||d==1) //分母为1 直接输出分子.
{
return Integer.toString(c);
} else if(Math.abs(c)<Math.abs(d))
{
return Integer.toString(c)+"/"+Integer.toString(d);
}
else
{
return c/d+(c<0?"":"+")+Integer.toString(c%d)+"/"+Integer.toString(d);//值为负,不加加号。
}
}
//----- plus
public Fraction minus(Fraction f2)
{
int newNumerator=c*f2.getDinominator()-d*f2.getNumerator();
int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//---- minus
public Fraction plus(Fraction f2)
{
int newNumerator=c*f2.getDinominator()+d*f2.getNumerator();
int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//----- mutiply
public Fraction multiply(Fraction f2) //两个分数相乘。
{
int newNumerator=c*f2.getNumerator();
int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//----- divide
public Fraction divide(Fraction f2)
{
if(f2.getNumerator()==0)
{
System.out.println("0不能做除数!");
System.exit(0);
}
Fraction result=new Fraction();
int newNumerator=c*f2.getDinominator();
int newDinominator=d*f2.getNumerator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//计算2个数的最大公约数。按绝对值计算。
public int commonDivisor(int x,int y) //计算2个数的最大公约数。按绝对值计算。
{
if(x==0||y==0)
{
return 1;
}
int x1;
int y1; x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y); //使x1>y1.
y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);
int z=1;
while(z!=0)
{
z=x1%y1;
x1=y1;
y1=z;
}
return x1;
}
}