错误: 程序包不存在

s5156520 2014-09-16 12:01:13
本人看的是动力节点 吴世忠老师的java视频,在第5天的视频里,演示package和import关键字的时候,我按照视频上的写了代码,编译的时候出错了.我写的代码如下,有四个文件:
第一个文件:
package com.powernode.test1;

/**求 100至999的所有水仙花数
* 水仙花数是指其每个数位的数字的立方相加等于其本身
* 例如 407 = 4*4*4+0*0*0+7*7*7
* 程序分析,用for循环控制100至999个数
* 每个数分解出 百位 十位 个位
*/
public class Daffodils {

/** 判断i是否是一个水仙花数的方法
* @param i i是要判断的数
* @return 如果i是水仙花数,则返回true
*/
public static boolean isDaffodils(int i){

// 求参数i的百位,十位,各位数字
int baiwei=i/100; //百位
int shiwei=i/10%10; //十位
int gewei=i%100%10; //个位

if((liFang(baiwei)+liFang(shiwei)+liFang(gewei))==i)
return true;
else
return false;
}

//返回i的立方值
public static int liFang(int i){
return i*i*i;
}

}


第 2个文件:
package com.powernode.test1;

public class JinZiTa{

// 实现金字塔的方法
//@pram i 要打印的金zi塔的高度
public void makeJinZiTa(int i){

//用for循环控制层数
for (int j= 0; j<i;j++){
// 先打印金字塔的前半部分空格
for(int k=0;k<i-j;k++){
System.out.print(" ");
}
//再打印*符号,*的个数是2*层数数目+1,
for(int f=0;f<j*2+1;f++){
System.out.print("*");
}
//打印完*换行
System.out.print("\n");
}

}

}


第三个文件:
package com.powernode.test1;

public class Student{

// 类的静态特性叫属性
// 类的动态行为叫方法
nt age;
String name;


public void setName(String _name){
name=_name;
}

public String getName(){
return name;
}

public void setAge(int _age){
age=_age;
}

public int getAge(){
return age;
}

//在类的方法中可以直接访问类的属性
public void study(String kecheng){
System.out.println(name + "正在学习" +kecheng+", 他的年龄: "+age);
}

public Student(int _age,String _name){
age=_age;
name=_name;
}

public Student(){
}

}


第四个文件:
package com.powernode.test;

// 一个java源文件中只能有一个package语句
// 但是可以有多个import语句

// 注意:import com.powernode.test1.*;
// 以上的语句只能导入test1目录中的字节码
// 但是test1目录里面的子目录中的字节码是无法导入的
import com.powernode.test1.*;

//import com.powernode.test1.Narcissus;

public class StudentTest {
public static void main(String[] args) {
//Student stu = new Student("張1",21);
Student stu = new Student();
stu.setAge(23);
stu.setName("张1");
stu.study("CoreJava");

System.out.println("====================");

Narcissus n = new Narcissus();
for(int i = 100;i<1000;i++){
if(n.isNarcissus(i)){
System.out.println(i + " 是水仙花数!");
}
}

System.out.println("====================");
JinZiTa1 ta = new JinZiTa1();
ta.printTa(10);
}
}


javac -d . xx.java 从第一个到第四个挨个编译,最后javac -d . StudentTest.java 报错如下:



如果 一次性 这样编译 javac -d . *.java 错误更多. 但是我用 javac -d . *.java 编译教程里代码 ,一次OK, 我想知道为什么我的出错了.

教程里的代码如下:
第一个文件:
package com.powernode.test1;
/*
【程序4】
打印出所有的"水仙花数",所谓"水仙花数"是指一
个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方
+3的三次方。
1.程序分析:利用for循环控制100-999个数,
每个数分解 出个位,十位,百位。

*/
public class Narcissus {
/**
* 判断指定的num是否是水仙花数
* @param num 要判读的数
* @return 是否是水仙花数,true 表示是
*/
public boolean isNarcissus(int num){
// 分别从这个数中拆分出个位数值,十位数值,百位数值
int baiWei = num/100; //百位数值
int shiWei = num/10%10; // 十位数值
int geWei = num%100%10; // 个位数值

if(num == liFang(baiWei) + liFang(shiWei) + liFang(geWei) ){
return true;
}else{
return false;
}
}

/**
* 计算指定的数值的立方
* @param num 要计算的数
* @return 该数的立方
*/
private int liFang(int num){
return num * num * num;
}
}


第二个文件:
package com.powernode.test1;

public class JinZiTa1 {


/**
* 打印金子塔
* @param level 金字塔的层数
*/
public void printTa(int level){
for(int i = 0;i<level;i++){

// 控制金子塔每层前面的空格
// 如果总共是5层,则第一层要打印4个空格,
// 第二层要打印3个空格,则控制空格个数的
// 表达式为j<n-i
for(int j=0;j<level-i;j++ ){
System.out.print(" ");//空格数
}

// 控制每层金字塔打印的*号的个数
// 当i=0时,第一层金字塔 :for(int k = 0; k <= 0; k++),打印一个*号
// 当i=1时,第二层金字塔 :for(int k = 0; k <= 2; k++):打印三个*号
for(int k=0;k<=i*2;k++){
System.out.print("*");//星号数
}
System.out.println("");
}
}

}


第三个文件:
// java源文件中只能有一个package语句,并且只能放在代码的第一行
// 包明的命名规范:所有的包名都是小写的
// 动力节点的域名 powernode.com;
// 实际命名包名的时候:com.powernode.xxx
// java中打包是为了把功能相同的一些类组织到一起
package com.powernode.test1;

// 类里面是什么?属性和方法构造方法
public class Student{
// 对于成员变量,系统会自动的进行初始化(0,null)
private int age;
private String name;

public void setName(String _name){
name =_name;
}

public String getName(){
return name;
}

public void setAge(int _age){
/*
if(_age <0 || _age >130){
System.out.println(_age + " 不是有效的年龄");
}else{
age = _age;
}
*/

if(_age <0 || _age >130){
System.out.println(_age + " 不是有效的年龄");
return;
}
age = _age;
}

public int getAge(){
return age;
}

public void study(String className){
System.out.println(name + " 在学习:" + className + " 他的年龄是:" + age);
}


// 当我们自己提供了有参数的构造方法之后,系统默认的无参数的构造方法就不会再提供了
// 如果还想要用无参数的构造方法,只能自己提供
// 在一个类中,可以同时提供多个构造方法,这种形式叫做:构造方法重载(Overload)
// 必须是构造方法的参数列表不同(参数的个数,参数的类型,参数的顺序)
public Student(String _name,int _age){
name =_name;
age =_age;
}

public Student(){
}
}


第四个文件:
package com.powernode.test;

// 一个java源文件中只能有一个package语句
// 但是可以有多个import语句

// 注意:import com.powernode.test1.*;
// 以上的语句只能导入test1目录中的字节码
// 但是test1目录里面的子目录中的字节码是无法导入的
import com.powernode.test1.*;

//import com.powernode.test1.Narcissus;

public class StudentTest {
public static void main(String[] args) {
//Student stu = new Student("張1",21);
Student stu = new Student();
stu.setAge(23);
stu.setName("张1");
stu.study("CoreJava");

System.out.println("====================");

Narcissus n = new Narcissus();
for(int i = 100;i<1000;i++){
if(n.isNarcissus(i)){
System.out.println(i + " 是水仙花数!");
}
}

System.out.println("====================");
JinZiTa1 ta = new JinZiTa1();
ta.printTa(10);
}
}




...全文
774 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我把你的4个代码,全部编译了, 没有问题 问题是你在别的类,引用 这4个类的时候 ,访问权限出了问题
rumlee 2014-09-16
  • 打赏
  • 举报
回复
从报错的信息看,与你的代码一比对,可以肯定你编译的代码和你传上来的代码不一致。 另外建议用一个ide吧,你这种错误,不用编译,ide直接就给你提示了。
  • 打赏
  • 举报
回复
从你提供的错误信息看是 ,访问权限的问题 ,不是程序包的问题 是你用 public protected private 访问权限控制符的问题 试着改一下吧

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧