java 中 “找不到符号”的错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中 “找不到符号”的错误相关的知识,希望对你有一定的参考价值。

程序要求:定义一个类Fact表示无符号有理数(分数),成员有分子(num)和分母(den)
构造函数2个
一组get方法
一组set方法
方法:
-比较两个分数的大小,结果为boolen的值
-对分数进行约分(分子分母同时除以最大公约数)

-对两个分数进行通分(先约分)
-两个分数相加,结果为不可约数(先通分,然后再约分)
定义testFact类,
创建Fact对象,并调用各个方法

本人的程序:
import java.util.*;
class Fact

private int num;
private int den;
public Fact(int m,int n)

this.num=m;
this.den=n;

public Fact()
public void get(Fact a)//get方法

System.out.println("该分数为:"+this.num+"/"+this.den);

public Fact set(Fact x)//set方法

Scanner a=new Scanner(System.in);
System.out.println("Input num:");
int p=a.nextInt();
System.out.println("Input den:");
int q=a.nextInt();
this.num=p;
this.den=q;
return this;

public boolean cmp(Fact m,Fact n)//比较大小

set(m);
get(m);
set(n);
get(n);
int x=m.num*n.den;
int y=m.den*n.num;
if(x*y==0)

return false;

else

return true;


public int gcd(int a,int b)//最大公约数

int m,gcd;
m=b;
while(a%b!=0)

b=a%b;
a=m;

gcd=b;
return gcd;

public Fact yf(Fact m)//约分

return Fact(m.num/gcd(m.num,m.den),m.den/gcd(m.num,m.den));

public void tf(Fact m,Fact n)//通分

m=Fact(m.num/gcd(m.num,m.den),m.den/gcd(m.num,m.den));
n=Fact(n.num/gcd(n.num,n.den),n.den/gcd(n.num,n.den));
m=Fact(m.num*n.den,m.den*n.den);
n.fact(m.den*n.num,m.den*n.den);

public Fact add(Fact m,Fact n)//相加

tf(m,n);
Fact x=new Fact(m.num+n.num,m.den+n.den);
return yf(x);


public class TestFact

public static void main(String[] args)

Fact a,b;
set(a);
get(a);
set(b);
get(b);
cmp(a,b);
System.out.println("a约分之后为:"+get(yf(a)));
System.out.println("b约分之后为:"+get(yf(b)));
tf(a,b);
System.out.println("a通分之后:"+get(a));
System.out.println("b通分之后:"+get(b));
add(a,b);


多次出现找不到符号的错误,请高手指教!请尽量在我的程序上修改

lz需要再多多努力,以下代码仅供参考:

import java.util.Scanner;

class Fact

private int num;
private int den;

public Fact()


public Fact(int num, int den)
this.num = num;
this.den = den;


public int getDen()
return den;


public void setDen(int den)
this.den = den;


public int getNum()
return num;


public void setNum(int num)
this.num = num;


public static Fact input()
Scanner jin = new Scanner(System.in);
System.out.println("输入分子:");
int a = jin.nextInt();
System.out.println("输入分母:");
int b = jin.nextInt();
Fact fact = new Fact(a, b);
return fact;


public static boolean cmp(Fact a, Fact b) //分数a>分数b,返回true,否则返回false
if (a.getNum() * b.getDen() > b.getNum() * a.getDen())
return true;
else
return false;



public static int maxDivisor(int a, int b) //最大公约数
int temp = b;
while (a % b != 0)
b = a % b;
a = temp;

return b;


public static void divise(Fact a) //约分

int temp= Fact.maxDivisor(a.getNum(), a.getDen());
a.setNum(a.getNum() / temp);
a.setDen(a.getDen() / temp);


public static void comm(Fact a, Fact b) //通分
Fact.divise(a);
Fact.divise(b);
int comDen = a.getDen() * b.getDen();
int aNum = a.getNum() * b.getDen();
int bNum = b.getNum() * a.getDen();
a.setNum(aNum);
a.setDen(comDen);
b.setNum(bNum);
b.setDen(comDen);


public static Fact plus(Fact a, Fact b) //两个分数相加
Fact newFact = new Fact();
Fact.comm(a, b);
newFact.setNum(a.getNum()+b.getNum());
newFact.setDen(a.getDen());
Fact.divise(newFact);
return newFact;

public static void showFact(Fact fact)

System.out.println("分数为:"+fact.getNum()+"/"+fact.getDen());



public class TestFact

public static void main(String[] args)
System.out.println("输入一个分数:");
Fact fact1 =Fact.input();
Fact.showFact(fact1);
System.out.println("约分后:");
Fact.divise(fact1);
Fact.showFact(fact1);
System.out.println("再输入一个分数:");
Fact fact2=Fact.input();
Fact.showFact(fact2);
System.out.println("约分后:");
Fact.divise(fact2);
Fact.showFact(fact2);
System.out.println("比较两个分数:");
if (Fact.cmp(fact1, fact2))
System.out.println("第一个分数大于第二个分数!");
else
System.out.println("第一个分数不大于第二个分数!");

System.out.println("通分后,两分数分别为:");
Fact.comm(fact1, fact2);
Fact.showFact(fact1);
Fact.showFact(fact2);
System.out.println("两分数相加为:");
Fact a=Fact.plus(fact1, fact2);
Fact.showFact(a);

参考技术A input
这个变量是输入流,toLowerCase()是将字符串转换成小写,看该程序的用意,是希望从控制台输入密钥,然后打印出来,你设置的输入流,但没有让输入流接收数据,应该先读:input.readLine()具体方法,你看一下API。你应该先把数据放入这个流中,然后才能取到数据。而readLine就是接收数据。先接收这个流里面才有数据
参考技术B 说实话,java的面向对象你一点都没学到。按照你的说明给你写的新代码,你看看:
import java.util.*;

class Fact
private int num;
private int den;

public Fact()


public Fact(int num, int den)
this.num = num;
this.den = den;


public int getNum()
return num;


public void setNum(int num)
this.num = num;


public int getDen()
return den;


public void setDen(int den)
this.den = den;


@Override
public boolean equals(Object arg0)
if (arg0 instanceof Fact)
Fact fact = (Fact) arg0;
if (fact.getDen() == this.den && fact.getNum() == this.num)
return true;


return false;


public String get()// get方法

return "该分数为:" + this.num + "/" + this.den;


public Fact set()// set方法

Scanner a = new Scanner(System.in);
System.out.println("Input num:");
int p = a.nextInt();
System.out.println("Input den:");
int q = a.nextInt();
this.num = p;
this.den = q;
return this;


public Fact yf()// 约分

for (int i = 2; i <= this.num; i++)
if ((this.num % i == 0) && (this.den % i == 0))
this.num /= i;
this.den /= i;
i--;


return this;


public Fact tf(Fact m)// 通分

if (this.den % m.getDen() == 0)
return this;
else if (m.getDen() % this.den == 0)
return new Fact(this.num * m.getDen() / this.den, m.getDen());
else
return new Fact(this.num * m.getDen(), this.den * m.getDen());



public Fact add(Fact m)// 相加

Fact t1 = this.tf(m);
Fact t2 = m.tf(this);
return new Fact(t1.getNum() + t2.getNum(), t1.getDen()).yf();



public class TestFact
public static void main(String[] args)
Fact a = new Fact();
Fact b = new Fact();
a.set();
System.out.println(a.get());
b.set();
System.out.println(b.get());
System.out.println(a.equals(b));
System.out.println(a.equals(a));
System.out.println("a约分之后为:" + a.yf().get());
System.out.println("b约分之后为:" + b.yf().get());
System.out.println("a按照b通分之后:" + a.tf(b).get());
System.out.println("b按照a通分之后:" + b.tf(a).get());
System.out.println("a、b相加之后:" + a.add(b).get());


运行结果如下:
Input num:
1
Input den:
5
该分数为:1/5
Input num:
3
Input den:
4
该分数为:3/4
false
true
a约分之后为:该分数为:1/5
b约分之后为:该分数为:3/4
a按照b通分之后:该分数为:4/20
b按照a通分之后:该分数为:15/20
a、b相加之后:该分数为:19/20
参考技术C 天啦,看了你的程序。才知道什么叫稀烂的JAVA!!!!(估计是学C太多了吧) TestFact 这个类居然写成这个样子。不好意思,我真的是看不下去了。楼主也许生气了,可是说白了,谁写这个main方法的人简直就是没见过java的人,还得认真学啊! 参考技术D 整个程序的思维逻辑是错误的!
set(a);
get(a);
set(b);
get(b);
这些方法调用的不对,需要对象想用,例如a.set(a);
这样,但是你没有实例化,
Fact a=new Fact();
Fact b=new Fact();
a.set(a);
a.get(a);

b.set(b);
b.get(b);
cmp(a,b);
下面的这3个也要用对象调用的!
cmp(a,b);
tf(a,b);
add(a,b);

你没有搞清楚面想对象编程!整个思路不对啊!重新写吧!

java 枚举 找不到符号

public class EnumWithMethods

public enum Season
SPRING,SUMMER,FALL,WINTER;
private final static String location="Phoenix";
public static Season getBest()

if(location.equals("Phoenix"))
return WINTER;
else
return SUMMER;

public static void main(String args[])

System.out.println(Season.getBest());


书上的程序,显示了3个错误,都是找不到符号,分别是WINTER,SUMMER,getBest方法,麻烦高手解释下

public class EnumWithMethods

public enum Season

SPRING, SUMMER, FALL, WINTER
;
private final static String location = "Phoenix";

public static Season getBest()
if (location.equals("Phoenix"))
return Season.WINTER;//
else
return Season.SUMMER;//



public static void main(String args[])
System.out.println(EnumWithMethods.getBest());//



说明:1、WINTER、SUMMER是Season中定义的要改为:Season.WINTER、Season.SUMMER;
2、getBest()函数定义为public static 类型的,你在本类(EnumWithMethods而非Season)中可直接调用写成System.out.println(getBest());,或加上类名的System.out.println(EnumWithMethods.getBest());
参考技术A public class EnumWithMethods
public enum Season
SPRING,SUMMER,FALL,WINTER;
private final static String location="Phoenix";
public static Season getBest()

if(location.equals("Phoenix"))
return Season.WINTER;
else
return Season.SUMMER;


public static void main(String args[])

System.out.println(getBest());


参考技术B public enum Season
SPRING,SUMMER,FALL,WINTER;
多了一个;号。把那个去掉。

以上是关于java 中 “找不到符号”的错误的主要内容,如果未能解决你的问题,请参考以下文章

java 枚举 找不到符号

java package找不到符号

java里显示找不到符号?

java中提示找不到符号

使用java的jar包默认类提示找不到符号

java集合的一个程序,总是提示找不到符号,找不到原因在哪?求大神帮助!