面向对象程序设计之试题
类和对象
-
定义一个菜谱类Recipe用来存储某种菜的制作过程等相关信息,其属性包括:菜谱名称、菜系(如:川菜、湘菜等)、烹饪时长(分钟)、所需的多种食材(字符串数组类型,假设每种菜所需食材不会超过10种)、操作步骤,在main方法中定义一个数组存储5个菜谱的信息。
要求:
(1)按名称模糊查询并输出符合条件的菜谱的所有信息,要求实现查找包含特定名称的菜谱信息的方法:searchRecipesContainName(Recipe[] recipes, String name),例如:希望找到所有名称中包含牛肉的菜谱,可以使用字符串类String类的contains方法,来判断某个字符串中是否包含某个子串。
输出格式:
(2)按菜系查询并输出符合条件的菜谱的所有信息,要求能够实现查找某个菜系的菜谱信息的方法:searchRecipes(Recipe[] recipes, String style),例如:希望查找所有湘菜的菜谱(可以使用字符串类String类的equals方法,来判断某个字符串是否与指定字符串相同),输出格式同上。
(3)查询烹饪时间小于某个时长的菜谱并输出,要求实现查找方法:searchRecipeLessThan(Recipe[] recipes, int time),例如:希望查找烹饪时长小于30分钟的菜谱,输出格式同上。
(4)查询包含某种食材的菜谱信息并输出,要求实现查找方法:searchRecipeContainsFood(Recipe[] recipes, String food),例如:希望查找包含西红柿的菜谱,输出格式同上。
提示:
(1)定义的菜谱类:包括属性、属性的getter、setter方法。
(2)类中其他方法可自由发挥,比如打印菜谱信息的方法(如print()或toString())
(3)自己定义包含main方法的类,类中定义4个static方法,分别用来实现要求中规定的4个方法
package www.wy.ch01;
import java.util.Arrays;
public class Recipe {
private String name;//名称
private String style;//菜系
private int time;//时长
private String[] materials;//食材
private String step;//步骤
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStyle() {
return style;
}
public void setStyle(String style) {
this.style = style;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public String[] getMaterials() {
return materials;
}
public void setMaterials(String[] materials) {
this.materials = materials;
}
public String getStep() {
return step;
}
public void setStep(String step) {
this.step = step;
}
public void print() {
System.out.println("菜谱名称:" + name);
System.out.println("菜系:" + style);
System.out.println("时长:" + time);
System.out.print("所需食材:");
for(String material : materials) {
System.out.print(material + " ");
}
System.out.println();
System.out.println("操作步骤:" + step);
}
}
package www.wy.ch01;
public class Test {
public static void main(String[] args) {
Recipe[] recipes = new Recipe[5];
Recipe recipe1 = new Recipe();
recipe1.setName("酱牛肉");
recipe1.setStyle("家常菜");
recipe1.setTime(120);
String[] materials1 = {"牛腱子","黄豆酱油","黄酒","冰糖"};
recipe1.setMaterials(materials1);
recipe1.setStep("1.准备好主要食材;2.加入食材慢炖两至三小时");
recipes[0] = recipe1;
Recipe recipe2 = new Recipe();
recipe2.setName("红烧牛肉");
recipe2.setStyle("家常菜");
recipe2.setTime(120);
String[] materials2 = {"牛腩","牛筋","生抽","冰糖"};
recipe2.setMaterials(materials2);
recipe2.setStep("1.准备好主要食材;2.加入食材慢炖两至三小时");
recipes[1] = recipe2;
Recipe recipe3 = new Recipe();
recipe3.setName("农家小炒肉");
recipe3.setStyle("湘菜");
recipe3.setTime(10);
String[] materials3 = {"青椒","红椒","酱油肉","葱"};
recipe3.setMaterials(materials3);
recipe3.setStep("1.准备好主要食材并切块;2.锅内倒少许的油后放入葱花爆香,然后加入食材翻炒");
recipes[2] = recipe3;
Recipe recipe4 = new Recipe();
recipe4.setName("西红柿炒鸡蛋");
recipe4.setStyle("家常菜");
recipe4.setTime(10);
String[] materials4 = {"西红柿","鸡蛋"};
recipe4.setMaterials(materials4);
recipe4.setStep("1.西红柿切块,鸡蛋打散;2.先炒鸡蛋,再加入西红柿");
recipes[3] = recipe4;
Recipe recipe5 = new Recipe();
recipe5.setName("水煮鱼");
recipe5.setStyle("川菜");
recipe5.setTime(30);
String[] materials5 = {"鲤鱼","黄豆芽"};
recipe5.setMaterials(materials5);
recipe5.setStep("1.处理鲤鱼;2.加入食材炖5分钟即可");
recipes[4] = recipe5;
searchRecipesContainName(recipes, "鱼");//根据名称模糊查询
// searchRecipes(recipes, "湘菜");//根据菜系查询
// searchRecipeLessThan(recipes, 30);//根据做饭的时间查询
// searchRecipeContainsFood(recipes,"西红柿");//根据做饭所需食材查询
}
public static void searchRecipesContainName(Recipe[] recipes,
String name) {
for(int i = 0; i < recipes.length; i++) {
if(recipes[i].getName().contains(name)) {
recipes[i].print();
}
}
}
public static void searchRecipes(Recipe[] recipes,
String style) {
for(int i = 0; i < recipes.length; i++) {
if(recipes[i].getStyle().equals(style)) {
recipes[i].print();
}
}
}
public static void searchRecipeLessThan(Recipe[] recipes,
int time) {
for(int i = 0; i < recipes.length; i++) {
if(recipes[i].getTime() < time) {
recipes[i].print();
}
}
}
public static void searchRecipeContainsFood(Recipe[] recipes,
String food) {
for(int i = 0; i < recipes.length; i++) {
String[] foods = recipes[i].getMaterials();
for(String f : foods) {
if(f.equals(food)) {
recipes[i].print();
}
}
}
}
}
- 定义一个复数类Complex类,该类需要满足以下条件:realPart表示复数的实数部分,imaginaryPart表示复数的虚数部分。
在该类中除了属性的getter、setter方法之外,还需要实现以下方法:
(1)一个Complex add(Complex anotherComplex)方法,将当前复数对象与形参复数对象相加,所得的结果仍然是一个复数值。
(2)一个Complex addAnther(int anotherReal, int anotherImaginary)方法,将当前复数对象与形参的实数和虚数部分表示的复数对象相加,所得结果仍然是一个复数。
(3)编写一个测试类,在main方法中创建两个复数1+2i和3+4i,并显示它们的和。
package com.homework0202;
public class Complex {
private int realPart;
private int imaginaryPart;
public int getRealPart() {
return realPart;
}
public void setRealPart(int realPart) {
this.realPart = realPart;
}
public int getImaginaryPart() {
return imaginaryPart;
}
public void setImaginaryPart(int imaginaryPart) {
this.imaginaryPart = imaginaryPart;
}
public Complex add(Complex a) {
int r = realPart + a.getRealPart();
int i = imaginaryPart + a.getImaginaryPart();
Complex c = new Complex();
c.setRealPart(r);
c.setImaginaryPart(i);
return c;
}
public Complex addAnther(int anotherReal,
int anotherImaginary) {
int r = realPart + anotherReal;
int i = imaginaryPart + anotherImaginary;
Complex c = new Complex();
c.setRealPart(r);
c.setImaginaryPart(i);
return c;
}
public String print() {
return realPart + "+" + imaginaryPart + "i";
}
}
package com.homework0202;
public class Test {
public static void main(String[] args) {
Complex c1 = new Complex();
c1.setRealPart(1);
c1.setImaginaryPart(2);
Complex c2 = new Complex();
c2.setRealPart(3);
c2.setImaginaryPart(4);
Complex c3 = c1.add(c2);
System.out.println(c1.print() + "加上" + c2.print());
System.out.println("结果是:" + c3.print());
Complex c4 = c1.addAnther(4, 6);
System.out.println(c4.print());
}
}