“商苑面馆:Java对象数组”的版本间的差异
来自CloudWiki
(→声明和创建对象数组) |
|||
第32行: | 第32行: | ||
下面我们新建一个测试类Test,并在测试类的main方法中建立了一个Noodle类的对象数组,将其初始化。: | 下面我们新建一个测试类Test,并在测试类的main方法中建立了一个Noodle类的对象数组,将其初始化。: | ||
+ | |||
+ | 通过测试类可以发现,对象数组和原先的普通数组类似,没有什么大的不同。 | ||
+ | |||
+ | 只不过原先普通数组的元素类型为int,double这些类型,在这里对象数组的元素类型为 Noodle(面条类) | ||
+ | |||
<nowiki>package test2; | <nowiki>package test2; |
2019年4月20日 (六) 04:26的版本
目录
前情回顾
普通一维数组
前面的学习中,我们学习了普通一维数组,如下所示。
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(); }
运行结果
课下练习
思考题:
- 根据课堂实训所学,仿照食物仓库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(); } }