编译Pond类时提示找不到Frog类,Fly类无异常求排查方案
编译Pond类时无法识别Frog类,报"cannot find symbol"错误
编译Pond类时持续出现error: cannot find symbol错误,系统无法识别Frog类,但编译Fly类未出现此类问题。尝试过删除Frog类的部分变量、调整文件存储位置、添加getter方法,均未能解决问题。相关代码及Windows终端报错信息如下:
主类Pond
package flyFrogPond; public class Pond { public static void main(String args[]) { Frog frogPeepo = new Frog("Peepo"); Frog frogPepe = new Frog("Pepe", 10, 15); Frog frogPeepaw = new Frog("Peepaw", 4.6, 5); Frog frogPeepue = new Frog("Peepue"); Fly fly1 = new Fly(1, 3); Fly fly2 = new Fly(6); Fly fly3 = new Fly(); Frog.setSpecies("1331 Frogs"); frogPeepo.toString(); frogPeepo.eat(fly2); fly2.toString(); frogPeepo.grow(8); frogPeepo.eat(fly2); fly2.toString(); frogPeepo.toString(); frogPeepue.toString(); frogPeepaw.grow(4); frogPeepaw.toString(); frogPepe.toString(); } }
Frog类
package flyFrogPond; public class Frog{ private String name; private int age; private double tongueSpeed; private boolean isFroglet; private static String species; private double ageInYears; public static void setSpecies( String Species){ species = Species;} public Frog(String Name){ name = Name; age = 5; tongueSpeed = 5; isFroglet = (age < 7 & age > 1) ? true : false; species = "Rare pepe"; } public Frog(String Name, double AgeInYears, double TongueSpeed){ name = Name; ageInYears = AgeInYears; tongueSpeed = TongueSpeed; age = (int) (ageInYears * 12); isFroglet = (age < 7 & age > 1) ? true : false; species = "Rare pepe"; } public Frog(String Name, int Age, double TongueSpeed){ name = Name; age = Age; tongueSpeed = TongueSpeed; isFroglet = (age < 7 & age > 1) ? true : false; //species = "Rare pepe"; } public void grow(int addedAge) { while (age < 12 & addedAge > 0){ age ++; tongueSpeed ++; addedAge --; } while (age < 30 & addedAge > 0){ age ++; addedAge --; } while (addedAge > 0){ age ++; tongueSpeed =- 0.5; addedAge --; } isFroglet = (age < 7 & age > 1) ? true : false; } public void grow() { int addedAge = 1; while (age < 12 & addedAge > 0){ age ++; tongueSpeed ++; addedAge --; } while (age < 30 & addedAge > 0){ age ++; addedAge --; } while (addedAge > 0){ age ++; tongueSpeed =- 0.5; addedAge --; } isFroglet = (age < 7 & age > 1) ? true : false; } public void eat(Fly fly) { if (fly.isdead()) { } else if (tongueSpeed > fly.getSpeed()){ grow(); fly.setMass(0); } else{ fly.growFly(1); } } public String toString(){ if (isFroglet){ return "My name is " + name + " and I’m a rare froglet! I’m " + age + " months old and my tongue has a speed of " + tongueSpeed + "."; } else{ return "My name is " + name + " and I’m a rare frog! I’m " + age + " months old and my tongue has a speed of " + tongueSpeed + "."; } } }
Fly类
package flyFrogPond; public class Fly{ private double mass, speed; public void setMass( double Mass) { this.mass = Mass;} public void setSpeed( double Speed) { this.speed = Speed;} public double getMass() { return mass;} public double getSpeed() { return speed;} public Fly(){ mass = 5; speed = 10; } public Fly(double Mass){ mass = Mass; speed = 10; } public Fly(double Mass,double Speed){ mass = Mass; speed = Speed; } public String toString(){ if (mass == 0){ return String.format("I’m dead, but I used to be a fly with a speed of %.2f", speed); } else{ return String.format("I’m a speedy fly with %.2f and %.2f mass", speed, mass); } } public void growFly(int addedMass){ while (mass < 20 & addedMass > 0){ mass ++; speed ++; addedMass --; } while (addedMass > 0){ mass ++; speed =- 0.5; addedMass --; } } public boolean isdead(){ if (mass == 0){ return true; } else{ return false; } } }
终端报错信息
PS C:\Users\gurna> javac F:\Notepad++\flyFrogPond\Frog.java PS C:\Users\gurna> javac F:\Notepad++\flyFrogPond\Pond.java F:\Notepad++\flyFrogPond\Pond.java:4: error: cannot find symbol Frog frogPeepo = new Frog("Peepo"); ^ symbol: class Frog location: class Pond F:\Notepad++\flyFrogPond\Pond.java:4: error: cannot find symbol Frog frogPeepo = new Frog("Peepo"); ^ symbol: class Frog location: class Pond 2 errors
问题原因与解决方法
核心原因
单独编译单个类文件时未指定类路径,且代码包含包声明,导致编译器无法找到已编译的Frog类文件。Java要求带包的类必须放在对应目录结构下,单独编译会破坏这种依赖关系。
解决步骤
切换到根目录:
代码包flyFrogPond位于F:\Notepad++\下,终端执行命令切换到该根目录:cd F:\Notepad++\批量编译所有类:
在根目录下一次性编译包内所有Java文件,编译器会自动处理依赖并生成正确的目录结构:javac flyFrogPond/*.java运行主类:
编译完成后,用完整包名运行Pond类:java flyFrogPond.Pond
额外建议
- 避免单独编译带包的Java类,批量编译能确保依赖关系正确。
- 修正Frog类中的语法细节:逻辑判断用
&&而非&(&是位运算符,可能导致非预期逻辑);tongueSpeed =- 0.5改为tongueSpeed -= 0.5(前者是赋值为-0.5,后者才是减法操作)。
内容的提问来源于stack exchange,提问作者Galaxy Borb
相关产品推荐
相关产品推荐

