1.方法
1.1 方法的语法格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
执行语句
………
return 返回值;
}
public class MethodDemo01 {
public static void main(String[] args) {
int area = getArea(3, 5); // 调用 getArea方法
System.out.println(" The area is " + area);
}
// 下面定义了一个求矩形面积的方法,接收两个参数,其中x为高,y为宽
public static int getArea(int x, int y) {
int temp = x * y; // 使用变量temp记住运算结果
return temp; // 将变量temp的值返回
}
}
1.2 方法调用图解
1.2方法定义练习
分别定义如下方法:
定义无返回值无参数方法,如打印3行,每行3个*号的矩形
定义有返回值无参数方法,如键盘录入得到一个整数
定义无返回值有参数方法,如打印指定M行,每行N个*号的矩形
定义有返回值有参数方法,如求三个数的平均值
l无返回值无参数方法,如打印3行,每行3个*号的矩形
public static void printRect{
// 打印3行星
for(
int i = 0;i<3;i++)
{
// System.out.println("***"); 相当于是打印3颗星,换行
// 每行打印3颗星
for (int j = 0; j < 3; j++) {
System.out.print("*"); // ***
}
System.out.println();
}
}
l有返回值无参数方法,如键盘录入得到一个整数
public static int getNumber(){
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();return number;
}
l无返回值有参数方法,如打印指定M行,每行N个*号的矩形
public static void printRect2(int m, int n) {
// 打印M行星
for (int i = 0; i < m; i++) {
// 每行中打印N颗星
for (int j = 0; j < n; j++) {
System.out.print("*");
}
System.out.println();
}
}
l 有返回值有参数方法,如求三个数的平均值
public static double getAvg(double a, double b, double c) {
double result = (a + b + c) / 3;
return result;
}
1.3 方法的重载
Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。
下面的三个方法互为重载关系
lpublic static int add(int x,int y) {逻辑} //两个整数加法
lpublic static int add(int x,int y,int z) {逻辑} //三个整数加法
lpublic static int add(double x,double y) {逻辑} //两个小数加法
注意事项:
l重载方法参数必须不同:
参数个数不同,如method(int x)与method(int x,int y)不同
参数类型不同,如method(int x)与method(double x)不同g
参数顺序不同,如method(int x,double y)与method(double x,int y)不同
l重载只与方法名与参数类型相关与返回值无关
如void method(int x)与int method(int y)不是方法重载,不能同时存在
l重载与具体的变量标识符无关
如method(int x)与method(int y)不是方法重载,不能同时存在
1.4参数传递图解与结论
通过上面的两段程序可以得出如下结论:
l当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
l当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响
2 随机点名器案例
在全班同学中随机的打印出一名同学名字。我们对本案例进行分析,得出如下分析结果:
1.存储全班同学名字
2.打印全班同学每一个人的名字
3.在班级总人数范围内,随机产生一个随机数,查找该随机数所对应的同学名字
该案例须有以下3个内容:
存储所有同学姓名
总览全班同学姓名
随机点名其中一人,打印到控制台
import java.util.Random;
import java.util.Scanner;
public class CallName_1 {
/*
* public static void main(String[] args) { // 存储姓名,姓名存储到数组中 // 数组存储姓名,String
* String[] names= {"张三","李四","王五","we","hsaihau"};
*
* //预览:遍历数组,打印所有姓名 for (int i=0;i<names.length; i++) {
* System.out.println(names[i]); } System.out.println("=====================");
*
* Random ran = new Random(); // 随机数,范围0-数组的最大索引 int index =
* ran.nextInt(names.length); System.out.println(names[index]);
*
* }
*/
public static void main(String[] args) {
System.out.println("--------随机点名器--------");
// 创建一个存储多个同学名字的容器(数组)
String[] students = new String[3];
/*
* 1.存储全班同学名字
*/
addStudentName(students);
/*
* 2.打印全班同学每一个人的名字
*/
printStudentName(students);
/*
* 3.获取随机点名到的学生姓名,并打印
*/
String randomName = randomStudentName(students);
System.out.println("被点到名的同学是 :" + randomName);
}
public static void addStudentName(String[] names) {
// 键盘输入多个同学名字存储到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < names.length; i++) {
System.out.println("存储第" + i + "个名称:");
names[i] = sc.next();
}
}
/**
* 2打印全班同学每一个人的名字
*/
public static void printStudentName(String[] names) {
// 遍历数组,得到每个同学名字
for (int i = 0; i < names.length; i++) {
String name = names[i];
// 打印同学名字
System.out.println("第" + i + "个学生名称:" + name);
}
}
/**
* 3.在班级总人数范围内,随机产生一个随机数,返回随机数位置上的学生姓名
*/
public static String randomStudentName(String[] names) {
// 根据数组长度,获取随机索引
int index = new Random().nextInt(names.length);
// 通过随机索引从数组中获取名称
// String name = names[index];
// 返回随机点到的名称
return names[index];
}
}
3 库存管理案例
管理员能够进行的操作有3项(查看、修改、退出),我们可以采用(switch)菜单的方式来完成。
-------------库存管理------------
1.查看库存清单
2.修改商品库存数量
3.退出
请输入要执行的操作序号:
每一项功能操作,我们采用方法进行封装,这样,可使程序的可读性增强。
选择“1.查看库存清单”功能,则控制台打印库存清单
选择“2.修改商品库存数量”功能,则对每种商品库存数进行更新
选择“3.退出”功能,则退出库存管理,程序结束
import java.util.Scanner;
/*
* 1.查看库存清单
* 2.修改商品库存数量
* 3.退出
*/
public class shopp {
public static void main(String[] args) {
// 使用数组,保存商品信息
// 品名,尺寸,价格,库存数
String[] brand = new String[] { "Macbook", "ThinkpadT450" };
double[] size = new double[] { 13.3, 15.6 };
double[] price = new double[] { 9998.9, 7888, 6 };
int[] count = new int[] { 0, 0 };
while (true) {
int choose = chooseFunction();
switch (choose) {
case 1:
printStore(brand, size, price, count);
break;
case 2:
update(brand, count);
break;
case 3:
exit();
return;
default:
System.out.println("功能选择有误,请输入正确的功能序号!");
break;
}
}
}
/*
* 修改所有商品的库存 返回值没有 参数 品名,库存数
*/
public static void update(String[] brand, int[] count) {
// 遍历数组,遍历到一个,修改一个
Scanner sc = new Scanner(System.in);
for (int i = 0; i < brand.length; i++) {
System.out.println("请输入" + brand[i] + "的库存");
int newCount = sc.nextInt();
count[i] = newCount;
}
// return count;
}
/*
* 打印库存清单,遍历 返回值没有 数组
*
*/
public static void printStore(String[] brand, double[] size, double[] price, int[] count) {
// 列表顶部
System.out.println("----------------查看库存清单-------------");
System.out.println("品牌型号 尺寸 价格 库存数");
int totalCount = 0;
double totalMoney = 0.0;
for (int i = 0; i < brand.length; i++) {
System.out.println(brand[i] + " " + size[i] + " " + price[i] + " " + count[i]);
totalCount += count[i];
totalMoney += count[i] * price[i];
}
// 列表底部
System.out.println("--------------------------------------");
System.out.println("总库存数:" + totalCount);
System.out.println("库存商品总金额:" + totalMoney);
}
/*
* 选择功能序号
*
*/
public static int chooseFunction() {
System.out.println("-------------库存管理------------");
System.out.println("1.查看库存清单");
System.out.println("2.修改商品库存数量");
System.out.println("3.退出");
System.out.println("请输入要执行的操作序号:");
// 接收键盘输入的功能选项序号
Scanner sc = new Scanner(System.in);
int chooseNumber = sc.nextInt();
return chooseNumber;
}
public static void exit() {
System.out.println("----------------退出---------------");
System.out.println("您已退出系统");
}
}