2017年3月22号 星期三 重度雾霾
内容:传递参数的两种方式,对象数组的理解,面向对象思想在编写代码中的应用,方法重载
Tips:ctrl+O--->显示该类所有方法
一、Demo01(传参数(开始位置、结束位置、查找的姓名),输入新、旧姓名进行修改并显示是否修改成功)
1、老师代码:
/**
* 实现学生的信息管理
*/
public class StudentBiz {
// 创建一个数组 用来保存 所有学生的姓名
String[] names = new String[10];
/**
* 新增学生姓名的方法
* @param name :用户传递过来的 参数
* 01.循环我们事先定义好的 数组
* 02.发现数组中有null的元素,证明 可以新增数据
* 03.把用户传递过来的名称 放到元素为null的位置
*/
private void addStudentName(String name) {
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
names[i] = name;
break;
}
}
}
/**
* 显示所有学生的姓名
*/
private void showStudentNames() {
for (int i = 0; i < names.length; i++) {
if (names[i] != null) {
System.out.println(names[i]);
}
}
}
/**
* 修改学生姓名,输入新、旧姓名,进行修改并显示是否修改成功
* @param oldName 旧姓名
* @param newName 新姓名
* @return 是否修改成功
*/
public boolean updateName(String oldName, String newName) {
// 定义一个标记
boolean flag = false;
for (int i = 0; i < names.length; i++) {
if (names[i].equals(oldName)) { // 证明可以修改姓名
names[i] = newName;
flag = true;
break;
}
}
return flag;
}
/**
* 设计方法,通过传递三个参数(开始位置、结束位置、查找的姓名)
来实现查询 指定学生姓名
* @param begin 开始位置
* @param end 结束位置
* @param name 查找的姓名
* @return 是否找到指定的学生
*/
public boolean findName(int begin, int end, String name) {
// 定义一个标记 默认没有找到
boolean flag = false;
for (int i = begin - 1; i < end; i++) {
if (names[i].equals(name)) { // 找到了
flag = true;
break;
}
}
return flag;
}
/**
* 测试方法
*/
public static void main(String[] args) {
StudentBiz stu = new StudentBiz();
Scanner scanner = new Scanner(System.in);
// 循环给学生的姓名 赋值
for (int i = 1; i <= 3; i++) {
System.out.println("请您输入第" + i + "个学生的姓名:");
String name = scanner.next();
// name 称之为 实参! 实际传递的参数
stu.addStudentName(name); // 调用学生类中 新增学生姓名的方法
}
// 显示所有学生的姓名
stu.showStudentNames();
System.out.println("请您输入从哪个位置开始查询:");
int begin = scanner.nextInt();
System.out.println("请您输入到哪个位置结束查询:");
int end = scanner.nextInt();
System.out.println("请您输入查询的学生姓名:");
String name = scanner.next();
// 调用查询的方法
if (stu.findName(begin, end, name)) {
System.out.println("找到了!");
} else {
System.out.println("没有找到!");
}
System.out.println("请您输入需要修改的学生姓名:");
String oldName = scanner.next();
System.out.println("请您输入修改之后的姓名:");
String newName = scanner.next();
// 调用修改姓名的方法
if (stu.updateName(oldName, newName)) {
System.out.println("修改成功!");
} else {
System.out.println("修改失败!");
}
}
}
二、Demo02(给学生成绩循环赋值后,输出平均分和最高分)用户只会关注我们的功能,不会去关注底层的代码实现!
1、老师代码:
public class ScoreTest {
/**
* 用户只会关注我们的功能,不会去关注底层的代码实现!
* 我们也没有必要把代码给用户观看!
*/
public static void main(String[] args) {
double[] scores = new double[5];
getScores(scores); // 循环赋值
System.out.println("平均分是:" + getAvg(scores)); // 平均分
System.out.println("最高分是:" + getMaxScore(scores)); // 最大值
}
/**
* @param scores 用户传递过来的集合
* @return 集合中的最大值
*/
private static double getMaxScore(double[] scores) {
// 先定义一个擂主
double max = scores[0];
for (int i = 0; i < scores.length; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
return max;
}
/**
* 平均分
* @param scores 用户传递过来的集合
*/
private static double getAvg(double[] scores) {
double sum = 0; // 记录总成绩
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
return sum / scores.length; // 返回平均分
}
/**
* 循环给学生成绩赋值
* @param scores 用户传递过来的集合
*/
private static void getScores(double[] scores) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "个学生的成绩:");
scores[i] = scanner.nextDouble();
}
}
}
三、Demo03(客户姓名排序)代码简单,老师没写
1、自己代码:
package cn.bdqn.test;
//客户姓名排序类
import java.util.Arrays;
public class NameArray {
public static void main(String[] args) {
// 初始化客户姓名数组
String[] names = { "Tom", "Jack", "Merry", "Smith", "Sunny" };
System.out.println("************排序前*****************");
System.out.println(Arrays.toString(names));// 输出数组信息
namesArray(names);// 调用排序方法
System.out.println("************排序后*****************");
System.out.println(Arrays.toString(names));// 输出排序后数组信息
}
/**
* 给客户姓名排序(顺序排列)
* @param names 传入客户姓名数组
*/
public static void namesArray(String[] names) {
Arrays.sort(names);
}
}
四、Demo04(模拟银行账户业务)
1、老师代码:
1)银行测试类
/**
* 模拟银行存款 取款功能
*/
public class AccountTest {
public static void main(String[] args) {
// 定义一个标记 用来记录用户是否退出系统
boolean flag = true;
// 创建银行账户的对象
Account account = new Account();
do {
System.out.println("1.存款\t\t2.取款\t\t0.退出");
System.out.println("请您输入选择:");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt(); // 获取用户的输入
switch (choose) {
case 0:
flag = false;
System.out.println("感谢您的使用!");
break;
case 1: // 存款
System.out.println("请您输入存款的金额:");
double money = scanner.nextDouble();
account.saveMoney(money);// 调用存款的方法
break;
case 2: // 取款
System.out.println("请您输入取款的金额:");
double goMoney = scanner.nextDouble();
account.goMoney(goMoney);// 调用取款的方法
break;
}
} while (flag);
}
}
2)银行实体类:
/**
* 银行的实体类
*/
public class Account {
double money = 0; // 默认初始化金额为0
/**
* 存款的方法
* @param money2存款的金额
*/
public void saveMoney(double money2) {
money += money2;
System.out.println("存款成功!");
System.out.println("当前的余额是:" + money);
}
/**
* 取款的方法
* @param money2 取款金额
*/
public void goMoney(double money2) {
if (money2 > money) { // 余额不足
System.out.println("余额不足!! 退出系统");
} else {
money -= money2;
System.out.println("取款成功");
}
System.out.println("当前的余额是:" + money);
}
}
五、Demo05(方法重载的各种举例)
1、老师代码:
public class OverTest {
/**
* 方法重载:
* 01.保证所有的方法在同一个类中
* 02.方法名称一致
* 03.参数列表不同(参数的类型,个数,参数的顺序 之间是或者的关系)
* 04.与方法的访问修饰符以及返回值类型 无关
*/
public static void main(String[] args) {
int num1 = 50;
double num2 = 50;
int num3 = 100;
String name = "小黑";
getSum(num1, num2);
getSum(num1, num3); // int类型的num3自动类型转换成double
getSum(num1, name);
getSum(name, num1);
}
private static void getSum(String name, int num1) {
System.out.println("getSum(String,int)==" + name);
}
private static void getSum(int num1, String name) {
System.out.println("getSum(int,String)==" + name);
}
private static void getSum(int num1, double num2) {
System.out.println("getSum(int,double)==" + (num1 + num2));
}
private static void getSum(int num1, int num2) {
System.out.println("getSum(int,int)==" + (num1 + num2));
}
public static String getSum() {
return "getSum()";
}
}
六、Demo06(方法传参的各种举例)
1、老师代码:
七、老师图示讲解对象数组(内存中图示):
八、作业
1、复习,银行账户demo的代码自己练习写一遍
2、这周看完面向对象的视频,下周开始看高级
3、做题,至少完成每周360道
4、跟上老师L课程的进度,每晚回去练习,当天消化
九、考试
2017.03.22
15: 21开始,16:02结束;答题时间:40分钟;检查时间:1分钟;
成绩:96 分
规划好时间,严格执行计划很重要。今天装载VMware感觉自己还是依赖性太强(靠苏同学的帮助太多),以后要培养独立解决问题的能力,百度从不同关键字进行搜索。多尝试,不要怕试错,这样才能成长。
十、老师辛苦了!