商苑面馆:Java对象数组

来自CloudWiki
跳转至: 导航搜索

问题引出

前面我们已经定义了这么多类和他们的父类?

如何把这么多类的对象存储起来?

答案:对象数组。

对象数组

普通一维数组

前面的学习中,我们学习了普通一维数组,如下所示。

4-110.png

public class TestArray {
   public static void main(String[] args) {
      // 数组大小
      int size = 5;
      // 第1种方法
      double[] myList = new double[size];
      myList[0] = 1;
      myList[1] = 2;
      myList[2] = 3;
      myList[3] = 4;
      myList[4] = 5; 
      
      
   }
}

对象数组

在我们学了类和对象之后,其实对象也可以创建数组,我们将它称作对象数组。

声明和创建对象数组的语法与基本类型值数组创建语法相同,例如:

Book[] books=new Book[5];

声明和创建对象数组

下面我们新建一个测试类Test,并在测试类的main方法中建立了一个Noodle类的对象数组,将其初始化。:

通过测试类可以发现,对象数组和原先的普通数组类似,没有什么大的不同。

只不过原先普通数组的元素类型为int,double这些类型,在这里对象数组的元素类型为 Noodle(面条类)


package test2;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Noodle [] nl = new Noodle[3];
        nl[0] = new Noodle("炸酱面",12.0,3);
        nl[1] = new Noodle("臊子面",14.0,2);
        nl[2] = new Noodle("刀削面",10.0,5);
        
        for(int i=0;i<3;i++){
        	if(nl[i].getName().equals("臊子面")){
        		System.out.println(nl[i].toString());
        	}
        	
        }
	}

}

此类为测试类,本实训完成后可将此类删去。

通过测试类可以发现,对象数组和原先的普通数组类似,没有什么大的不同。

只不过原先普通数组的元素类型为int,double这些类型,在这里对象数组的元素类型为 Noodle(面条类)

面馆实训

新建食物仓库类FoodDao

现在,我们在原先的项目中,新建立一个类FoodSet,表示食物仓库:这个类的成员变量只有一个——一个命名为n、成员类型为Food的对象数组。我们用它来表示我们面馆里所有食物。


public class FoodDao {
    private Food[] n;//食物数组
    
    
    public FoodDao(Food[] n ){
    	this.n = n;
    	
    } 
  
   
    public static void main(String[] args) {
		// TODO Auto-generated method stub  	
        
        
    }

}

新建search方法和toString方法

在FoodDao里面新建search方法和toString方法

search方法表示在类中寻找特定的商品

toString方法表示把整个仓库中的商品清单以字符串的形式展示出来。

   //按名称搜
    public Food search(String s){
    	for(int i=0;i<this.n.length;i++){
    		if(n[i].getName().equals(s)){
    			return n[i];//如果找到特定商品,就返回该商品
    		}
    	}
    	return null;//如果找不到特定商品,就返回一个空值
    	
    }
 
    public String toString(){
    	String s="";
    	for(int i=0;i<n.length;i++){//用for循环遍历对象数组里的每一个元素,并把它加到字符串s上。
    		s += n[i].toString()+"\r\n";
    	}
    	return s;
    }
  

编写测试用的main方法

main方法的代码主要包含:

  • 数组初始化
  • 接收用户输入
  • 调用FoodDao的方法
public static void main(String[] args) {
		// TODO Auto-generated method stub
    	 
    	
    	//数组初始化    
    	Food [] nl = new Noodle[3];
        nl[0] = new Noodle("炸酱面",12.0,3,"不辣");
        nl[1] = new Noodle("臊子面",14.0,2,"麻辣");
        nl[2] = new Noodle("刀削面",10.0,5,"微辣");
        FoodDao  f = new FoodDao(nl);
        System.out.println(f.toString());//调用toString方法
        
        //接收用户输入
        Scanner scan = new Scanner(System.in);
        System.out.println("您想点什么餐品?");               
        String meal = scan.next();
        System.out.println("输入的数据为:" + meal);        
        
        //按名称搜索,调用search方法
        Food n01 = f.search(meal);
        if(n01 != null) {
           System.out.println("餐品详细信息为:"+n01.toString());
           System.out.println("请付钱!");
	    }else {
	    	System.out.println("对不起,我们店现在没有这种面");
	    }
        
        scan.close();
        
        
    }
 

运行结果

Java5-5.png

课下练习

思考题:

  • 根据课堂实训所学,仿照食物仓库FoodDao的例子,如何为你的商城建立商品仓库***Dao?
  • 根据课堂实训所学,仿照食物仓库FoodDao的例子,如何为你的用户(User)建立用户数据库UserDao?

完整代码

import java.util.Scanner;

public class FoodDao {
    private Food[] n;//食物数组
    
    
    public FoodDao(Food[] n ){
    	this.n = n;
    	
    }
    //按名称搜
    public Food search(String s){
    	for(int i=0;i<this.n.length;i++){
    		if(n[i].getName().equals(s)){
    			return n[i];
    		}
    	}
    	return null;
    	//return new Noodle();
    }
 
    public String toString(){
    	String s="";
    	for(int i=0;i<n.length;i++){
    		s += n[i].toString()+"\r\n";
    	}
    	return s;
    }
   
    public static void main(String[] args) {
		// TODO Auto-generated method stub
    	 
    	
    	//数组初始化    
    	Food [] nl = new Noodle[3];
        nl[0] = new Noodle("炸酱面",12.0,3,"不辣");
        nl[1] = new Noodle("臊子面",14.0,2,"麻辣");
        nl[2] = new Noodle("刀削面",10.0,5,"微辣");
        FoodDao  f = new FoodDao(nl);
        System.out.println(f.toString());//调用toString方法
        
        //接收用户输入
        Scanner scan = new Scanner(System.in);
        System.out.println("您想点什么餐品?");               
        String meal = scan.next();
        System.out.println("输入的数据为:" + meal);        
        
        //按名称搜索,调用search方法
        Food n01 = f.search(meal);
        if(n01 != null) {
           System.out.println("餐品详细信息为:"+n01.toString());
           System.out.println("请付钱!");
	    }else {
	    	System.out.println("对不起,我们店现在没有这种面");
	    }
        
        scan.close();
        
        
    }

}