用ArrayList写得一个增删改查 java程序

dayutou881108 2011-08-24 04:13:47
错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
No enclosing instance of type Employ is accessible. Must qualify the allocation with an enclosing instance of type Employ (e.g. x.new A() where x is an instance of Employ).
No enclosing instance of type Employ is accessible. Must qualify the allocation with an enclosing instance of type Employ (e.g. x.new A() where x is an instance of Employ).

at com.yu.Employ.main(Employ.java:120)
代码:
package com.yu;

import java.util.*;
import java.io.*;
public class Employ {
/**
* 职工信息定义类
* @author Yu
*
*/

class Emp{

private String name;
private String age;
private float sal;
private String id;

public Emp(String id,String name,String age,float sal){
this.age=age;
this.id=id;
this.sal=sal;
this.name=name;
}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public float getSal() {
return sal;
}

public void setSal(float sal) {
this.sal = sal;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}
/**
* 职工信息管理类
* @author Yu
*
*/

class EmployM{
ArrayList a=null;
public EmployM(){
a=new ArrayList();

}

//增加一个职工
public void addEmp(Emp emp){

a.add(emp);

}
// 查询
public void showEmp(String id ){
for(int i=0;i<a.size();i++){
Emp emp=(Emp)a.get(i);
if(emp.getId().equals(id)){
System.out.println("查询的员工名字是"+emp.getName());
System.out.println("工资"+emp.getSal());
System.out.println("年龄"+emp.getAge());
System.out.println("性别"+emp.getId());
}
}

}
//删除
public void deleteEmp(String id){
for(int i=0;i<a.size();i++){
Emp emp=(Emp)a.get(i);
if(emp.getId().equals(id)){
a.remove(i);
a.remove(emp);
}
}

}
//更新
public void updateEmp(String id,float newsal){
for(int i=0;i<a.size();i++){
Emp emp=(Emp)a.get(i);
if(emp.getId().equals(id)){
emp.setSal(newsal);
}

}
}

}


/**主函数
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
EmployM employm=new EmployM();//此处显示错误????为什么呀?????????
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("请输入你的选择:");
System.out.println("1添加雇员:");
System.out.println("2删除雇员:");
System.out.println("3查询雇员:");
System.out.println("4修改工资:");
String operType=br.readLine();
if(operType.equals("1")){
System.out.println("请输入编号:");
String id=br.readLine();
System.out.println("请输入名字:");
String name=br.readLine();
System.out.println("请输入性别:");
String age=br.readLine();
System.out.println("请输入工资:");
float sal=Float.parseFloat(br.readLine());
Emp emp=new Emp(id, name, age, sal);//此处显示错误????为什么呀?????????

employm.addEmp(emp);
}else if(operType.equals("2")){
String id=br.readLine();

employm.deleteEmp(id);

}else if (operType.equals("3")){
String id=br.readLine();
employm.showEmp(id);
}else if(operType.equals("4")){
String id=br.readLine();
float sal=Float.parseFloat(br.readLine());
employm.updateEmp(id, sal);
}else if(operType.equals("5")){
System.exit(-1);
}

}

}

}
...全文
1098 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
herrojay_one 2011-08-24
  • 打赏
  • 举报
回复
强大的世界阿,我只是来观摩的
sunmoon620 2011-08-24
  • 打赏
  • 举报
回复
EmployM employm=new EmployM();
EmployM 是你对应的表名吗
cstlovewzy 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 username_fb 的回复:]
EmployM employm=new EmployM();//此处显示错误????为什么呀?????????
你定义的类不是public吧?
[/Quote]

内部类在实例化时应该从外到里实例化。所以在这里要实例化Emp类,应该这样写Emp emp=new Employ().new Emp();
yyozz 2011-08-24
  • 打赏
  • 举报
回复
将内部类全部写成public的外部类形式,
plusbug 2011-08-24
  • 打赏
  • 举报
回复
顶 顶
涅槃 2011-08-24
  • 打赏
  • 举报
回复
测试通过
涅槃 2011-08-24
  • 打赏
  • 举报
回复

import java.util.*;
import java.io.*;

public class Employ{
/**
* 职工信息定义类
*
* @author Yu
*
*/

class Emp {

private String name;
private String age;
private float sal;
private String id;

public Emp(String id, String name, String age, float sal) {
this.age = age;
this.id = id;
this.sal = sal;
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public float getSal() {
return sal;
}

public void setSal(float sal) {
this.sal = sal;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

/**
* 职工信息管理类
*
* @author Yu
*
*/

class EmployM {
ArrayList a = null;

public EmployM() {
a = new ArrayList();

}

// 增加一个职工
public void addEmp(Emp emp) {

a.add(emp);

}

// 查询
public void showEmp(String id) {
for (int i = 0; i < a.size(); i++) {
Emp emp = (Emp) a.get(i);
if (emp.getId().equals(id)) {
System.out.println("查询的员工名字是" + emp.getName());
System.out.println("工资" + emp.getSal());
System.out.println("年龄" + emp.getAge());
System.out.println("性别" + emp.getId());
}
}

}

// 删除
public void deleteEmp(String id) {
for (int i = 0; i < a.size(); i++) {
Emp emp = (Emp) a.get(i);
if (emp.getId().equals(id)) {
a.remove(i);
a.remove(emp);
}
}

}

// 更新
public void updateEmp(String id, float newsal) {
for (int i = 0; i < a.size(); i++) {
Emp emp = (Emp) a.get(i);
if (emp.getId().equals(id)) {
emp.setSal(newsal);
}

}
}

}

/**
* 主函数
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Employ employ = new Employ();
EmployM employm = employ.new EmployM();// 此处显示错误????为什么呀?????????
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("请输入你的选择:");
System.out.println("1添加雇员:");
System.out.println("2删除雇员:");
System.out.println("3查询雇员:");
System.out.println("4修改工资:");
String operType = br.readLine();
if (operType.equals("1")) {
System.out.println("请输入编号:");
String id = br.readLine();
System.out.println("请输入名字:");
String name = br.readLine();
System.out.println("请输入性别:");
String age = br.readLine();
System.out.println("请输入工资:");
float sal = Float.parseFloat(br.readLine());
Emp emp = employ.new Emp(id, name, age, sal);// 此处显示错误????为什么呀?????????

employm.addEmp(emp);
} else if (operType.equals("2")) {
String id = br.readLine();

employm.deleteEmp(id);

} else if (operType.equals("3")) {
String id = br.readLine();
employm.showEmp(id);
} else if (operType.equals("4")) {
String id = br.readLine();
float sal = Float.parseFloat(br.readLine());
employm.updateEmp(id, sal);
} else if (operType.equals("5")) {
System.exit(-1);
}

}

}

}



内部类就是要这样实例化,你可以去看看书
chuaizicai 2011-08-24
  • 打赏
  • 举报
回复
主要感觉还是静态方法的原因,跟内部类没什么关系。把main方法的的static去掉,这个类没有错误,只是不能执行
chuaizicai 2011-08-24
  • 打赏
  • 举报
回复
12楼的方法应该是最接近楼主本意的吧。
main方法是静态方法,不能访问本身类中的其他方法,变量,内部类。
所以main方法要访问其他本身类中的其他内部类必须先声明一个外部类,或者把外部的方法移动到main里面。

public class Employ {
int a =1;

public static void main(String[] args)
{
System.out.println(a);
}
}
报错

public class Employ {

int a = 1;

public static void main(String[] args)
{
Employ employ =new Employ();
System.out.println(employ.a);
}
}


public class Employ {

public static void main(String[] args)
{
int a = 1;
System.out.println(a);
}
}

都能正常运行
gannian 2011-08-24
  • 打赏
  • 举报
回复
B b = new A().new B();

or

A a = new A();
B b = a. new B();
gannian 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dayutou881108 的回复:]
引用 5 楼 ioe_gaoyong 的回复:
建议楼主不要用内部类了,将内部类全部写成public的外部类形式,放在同一个package下面

熊猫果果是正确的!!!但是为什么那?能解释一下啊嘛 解释好了 分就全给你!
[/Quote]
关于内部类和..内部类对像初始化问题..回家看书去..简单说..要初始化一个内部类对像..得先从外部类对像初始化开始...
A a = new A();
B b = new a.B();
风尘中国 2011-08-24
  • 打赏
  • 举报
回复
你原来写的那两个是内部类,不能直接new一个内部类,这是java语法。如果要new一个内部类,必须要首先通过内部类所在类的实例进行操作,在你代码里面就是需要先new 一个Employ,然后操作。
看你的代码很明显不想这样,给你改的结果就是把原来的两个内部类拿出Employ范畴,虽然跟Employ写在同一个文件,但是原来的两个类不再是Employ的内部类,是default的访问控制权限,因此你可以在Employ当中创建和访问

具体的语法内容你可以看看Java内部类的创建和操作,原因就在你写的两个内部类不能那么直接new

[Quote=引用 11 楼 dayutou881108 的回复:]

引用 5 楼 ioe_gaoyong 的回复:
建议楼主不要用内部类了,将内部类全部写成public的外部类形式,放在同一个package下面

熊猫果果是正确的!!!但是为什么那?能解释一下啊嘛 解释好了 分就全给你!
[/Quote]
softroad 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 luckyzhangye 的回复:]

或者也可以这样做:
在main方法里 先Employ employ = new Employ();
然后把出错的地方改为:EmployM employm = employ. new EmployM();
Emp emp = employ. new Emp(id, name, age, sal);
OK,测试也通过~~~~~
[/Quote]

内部类就是这么new的,没什么。
luckyzhangye 2011-08-24
  • 打赏
  • 举报
回复
或者也可以这样做:
在main方法里 先Employ employ = new Employ();
然后把出错的地方改为:EmployM employm = employ. new EmployM();
Emp emp = employ. new Emp(id, name, age, sal);
OK,测试也通过~~~~~
dayutou881108 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ioe_gaoyong 的回复:]
建议楼主不要用内部类了,将内部类全部写成public的外部类形式,放在同一个package下面
[/Quote]
熊猫果果是正确的!!!但是为什么那?能解释一下啊嘛 解释好了 分就全给你!
luckyzhangye 2011-08-24
  • 打赏
  • 举报
回复
把职工信息定义类和职工信息管理类放到main函数里面去,测试已通过。

上述错误原因:
No enclosing instance of type Employ is accessible
bzc1990 2011-08-24
  • 打赏
  • 举报
回复
把class Emp, class EmployM声明到class Employ外面,这和内部类的性质有关,你的main是静态的
dayutou881108 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 username_fb 的回复:]
EmployM employm=new EmployM();//此处显示错误????为什么呀?????????
你定义的类不是public吧?
[/Quote]
改了还是这个错误呀
zn85600301 2011-08-24
  • 打赏
  • 举报
回复
大概是类型转化的问题
风尘中国 2011-08-24
  • 打赏
  • 举报
回复
这样写至少没有编译错误了,逻辑问题我暂时没管
import java.util.*;
import java.io.*;

public class Employ {


/**
* 主函数
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
EmployM employm = new EmployM();// 此处显示错误????为什么呀?????????
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("请输入你的选择:");
System.out.println("1添加雇员:");
System.out.println("2删除雇员:");
System.out.println("3查询雇员:");
System.out.println("4修改工资:");
String operType = br.readLine();
if (operType.equals("1")) {
System.out.println("请输入编号:");
String id = br.readLine();
System.out.println("请输入名字:");
String name = br.readLine();
System.out.println("请输入性别:");
String age = br.readLine();
System.out.println("请输入工资:");
float sal = Float.parseFloat(br.readLine());
Emp emp = new Emp(id, name, age, sal);// 此处显示错误????为什么呀?????????

employm.addEmp(emp);
} else if (operType.equals("2")) {
String id = br.readLine();

employm.deleteEmp(id);

} else if (operType.equals("3")) {
String id = br.readLine();
employm.showEmp(id);
} else if (operType.equals("4")) {
String id = br.readLine();
float sal = Float.parseFloat(br.readLine());
employm.updateEmp(id, sal);
} else if (operType.equals("5")) {
System.exit(-1);
}

}

}

}
/**
* 职工信息定义类
* Emp是个内部类
* @author Yu
*
*/

class Emp {

private String name;
private String age;
private float sal;
private String id;

public Emp(String id, String name, String age, float sal) {
this.age = age;
this.id = id;
this.sal = sal;
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public float getSal() {
return sal;
}

public void setSal(float sal) {
this.sal = sal;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

/**
* 职工信息管理类
* EmployM也是个内部类
* @author Yu
*
*/

class EmployM {
ArrayList a = null;

public EmployM() {
a = new ArrayList();

}

// 增加一个职工
public void addEmp(Emp emp) {

a.add(emp);

}

// 查询
public void showEmp(String id) {
for (int i = 0; i < a.size(); i++) {
Emp emp = (Emp) a.get(i);
if (emp.getId().equals(id)) {
System.out.println("查询的员工名字是" + emp.getName());
System.out.println("工资" + emp.getSal());
System.out.println("年龄" + emp.getAge());
System.out.println("性别" + emp.getId());
}
}

}

// 删除
public void deleteEmp(String id) {
for (int i = 0; i < a.size(); i++) {
Emp emp = (Emp) a.get(i);
if (emp.getId().equals(id)) {
a.remove(i);
a.remove(emp);
}
}

}

// 更新
public void updateEmp(String id, float newsal) {
for (int i = 0; i < a.size(); i++) {
Emp emp = (Emp) a.get(i);
if (emp.getId().equals(id)) {
emp.setSal(newsal);
}

}
}

}
加载更多回复(5)

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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