方法
public 返回值类型 方法名(参数列表){
方法体
[return 数据类型的值]
}
返回值类型:void 无返回值
int 、String 具体数据类型 ,必须添加return+值;
调用者是否需要使用。
方法的参数
方法定义是否要参数,取决于方法执行过程是否需要调用者提供数据
案例:榨汁机 ,榨桃子汁 ,苹果汁,梨汁
public class ZhaZhiMachine {
public String zhaPeach() {
return "桃汁";
}
public String zhaPear() {
return "梨汁";
}
public String zhaApple() {
return "苹果汁";
}public String zhazhi(String fruit) {
return fruit+"汁";
}
}
public class ZhaZhiTest {
public static void main(String[] args) {
ZhaZhiMachine machine=new ZhaZhiMachine(); //调用处,实际参数,值,要求与形式参数的个数,数据类型,顺序都要一样。
String f="苹果";
String result=machine.zhazhi(f);
System.out.println(result);
}
}
形式参数 | 实际参数 |
---|---|
在方法定义处使用 | 在方法调用处使用 |
数据类型 变量名,数据类型 变量名… | 值列表,要与形参数据类型、顺序、个数一致 |
不需要赋值,可直接使用 | 赋值后,才能使用 |
//实现两个整数的加减乘除
public class Calculator {
int a;
int b;
public int ji(String fuhao, int a, int b) {
int c = 0;
if ("*".equals(fuhao)) {
c = a * b;
} else if ("+".equals(fuhao)) {
c = a + b;
} else if ("-".equals(fuhao)) {
c = a - b;
} else if ("/".equals(fuhao)) {
c = a / b;
}
return c;
}
}
public class TestC {
public static void main(String[] args) {
Calculator one = new Calculator();
int num = one.ji("-", 6, 2);
System.out.println(num);
System.out.println(one.ji("*",6,2));
System.out.println(one.ji("/",6,2));
System.out.println(one.ji("+",6,2));
}
}
多个参数,如果数据类型一样,也可以使用可变长参数。
可变长度的参数的限制:
1、一个方法中最多有1个可变长的参数
2、可变长度的参数可以和不可变长的参数组合使用,但是可变长的参数必须位于最后
public int getSum2(int... nums) {
int sum=0;
for (int i = 0; i < nums.length; i++) {
sum+=nums[i];
}return sum;
}
///
int[] nums= {12,2,3,24};
int r2=c.getSum2();//可变长参数可以不传参数
int r2=c.getSum2();//可变长参数可以传任意个数参数
int r2=c.getSum2(nums);//可变长参数可以传数组
System.out.println(r2);
参数传递
在方法体内对形参重新赋值,形参的改变不会影响实参
///基本数据类型作形参
public void f1(int m) {
m=12;
}
int a=10;
t.f1(a);
System.out.println(a);//10
/String作形参
public void f2(String str) {
str="hello";
}
String s="你好";
t.f2(s);
System.out.println(s);//你好
数组作形参
public void f3(int[] nums) {
nums=new int[4];
}
int[] n= {1,2,3};
t.f3(n);
System.out.println(n.length);//3
///自定义类型作形参
public void f4(Student s) {
s=new Student();
s.age=16;
}
Student stu=new Student();
stu.age=21;
t.f4(stu);
System.out.println(stu.age);//21
在方法体内修改引用类型空间中的数据,形参会影响实参
自定义类型作形参
public void f5(Student s) {
s.age=16;
}
Student stu=new Student();
stu.age=21;
t.f5(stu);
System.out.println(stu.age);//16
数组作形参
public void f6(int[] nums) {
nums[0]=6;
}
int[] n2= {10,2,3};
t.f6(n2);
System.out.println(n2[0]);//6
深入理解foreach的修改
int[] n= {2,3,4,5};
for (int i : n) {
i=0;
}
for (int i : n) {
System.out.print(i);
}//修改无效,输出2345
for (int i = 0; i < n.length; i++) {
n[i]=0;
}
for (int i : n) {
System.out.print(i);
}//修改有效,输出0000
对象数组中的修改
Student[] stus=new Student[2];
stus[0]=new Student();
stus[0].name="张三";
Student s=new Student();
stus[1]=s; stus[1].name="李四";
//s.name="李四";
for (Student student : stus) {
student.name="未知";//修改对象的属性,是可以的
}
for (Student student : stus) {
System.out.println(student.name);
}
练习
1
/*
* 课程Course:
属性:课程名称 学生名称列表 String[]
方法:String getCourse():获取课程名称
boolean addStudent(String stuName):添加学生
dropStudent(String stuName):删除学生
searchStudent(String stuName):查找学生
getStuNums():获取选课学生人数
String[] getStus():获取选课学生列表
*/
public class Course {
String[] strs = new String[10];
String clasName;
public String getCourse() {
return this.clasName;
}
public boolean addStudent(String str) {// 添加学生
boolean flag = false;
for (int i = 0; i < strs.length; i++) {
if (strs[i] == null) {
strs[i] = str;
flag = true;
break;
}
}
return flag;
}
public void dropStudent(String strName) {// 删除学生
for (int i = 0; i < strs.length; i++) {
if (strName.equals(strs[i])) {
strs[i] = null;
break;
}
}
System.out.println("已删除:" + strName);
}
public void searchStudent(String stuName) {// 查找学生
for (int i = 0; i < strs.length ; i++) {
if (stuName.equals(strs[i])) {
System.out.println("已查到:" + stuName);
}
}
}
public int getStuNums() {// 获取选课学生人数
int count = 0;
for (String string : strs) {
if (string != null) {// 数组中的学生不为空,计数器count累加
count++;
}
}
return count;
}
public void getStus() {// 获取选课学生列表
System.out.println("选课学生列表:");
System.out.println("学生姓名:");
int count = 0;
for (int i = 0; i < strs.length; i++) {
String s = strs[i];
if (s != null) {
count++;// 编号
System.out.println( count + "、" + s);
}
}
}
}
public class CourseTest {
public static void main(String[] args) {
Course one = new Course();
one.clasName = "数学";
String f= one.getCourse();
System.out.println("课程名称:"+f);
one.addStudent("王五");//学生姓名
one.addStudent("赵六");
one.addStudent("张三");
one.addStudent("田七");
one.addStudent("马十");
one.addStudent("刘八");
one.addStudent("胡一");
one.addStudent("李四");
one.addStudent("吴邪");
one.addStudent("胖子");
System.out.println();
System.out.println("选课学生人数:"+one.getStuNums()+"人");
one.searchStudent("李四");
one.dropStudent("张三");
System.out.println();
System.out.println("选课学生人数:"+one.getStuNums()+"人");
one.getStus();
}
}
2
/*
* 求一组序列中的最大值(使用数组和可变长度的参数分别实现)
*
*/
public class Maxnumber {
int[] nums = new int[4];
public int maxNumbershow(int[] nums) {//数组
int max = nums[0];
for (int i = 1; i < nums.length; i++) {
if (max < nums[i]) {//交换最大值
max = nums[i];
}
}
return max;
}
public int maxNumbershow1(int... nums) {//可变长度
int max = nums[0];
for (int i = 0; i < nums.length; i++) {
if (max < nums[i]) {//交换最大值
max = nums[i];
}
}
return max;
}
}
public class MaxnumberTest {
public static void main(String[] args) {
int[] nums = { 1, 2, 6, 88 };
Maxnumber one = new Maxnumber();
int r = one.maxNumbershow(nums);
System.out.println("数组中最大数为:"+r);
System.out.println("---------------");
int[] nums1 = { 86, 6, 5, 9, 7, 2, 33, 99, 97 };
Maxnumber two = new Maxnumber();
int m = two.maxNumbershow1(nums1);
System.out.println("数组中最大数为:"+m);
}
}
3
/*
* 根据行数,输出图形
*/
public class Graph {
public void graphShow(int a) {
for (int i = 1; i <= a; i++) {
// 空格
for (int k = 1; k <= a - i ; k++) {
System.out.print(" ");
}
for (int m = 1; m <= 2 * i - 1; m++) {// 输出**
System.out.print("*");
}
System.out.println();
}
}
}
public class gradeTest {
public static void main(String[] args) {
Graph one = new Graph();
one.graphShow(7);
}
}