我们在做手工时,会将很多"控件"组合起来。程序也是由控件组合而成的,程序控件的最小单位是方法。
方法的创建...方法的声明
方法的使用...方法的调用
方法的声明
package hello01;
import java.util.Scanner;
public class day01 {
static int max(int a,int b,int c) {
int max=a;
if(b>max) max=b;
if(c>max) max=c;
return max;
}
public static void main(String[] args) {
Scanner stdIn=new Scanner(System.in);
int [] height=new int[3];
int [] weight=new int[3];
int [] age=new int[3];
for(int i=0;i<3;i++) {
System.out.println("[" + (i + 1) + "]");
System.out.println("身高:"); height[i] = stdIn.nextInt();
System.out.println("体重:"); weight[i]=stdIn.nextInt();
System.out.println("年龄:"); age[i]=stdIn.nextInt();
}
int maxHeight=max(height[0],height[1],height[2]);
int maxWeight=max(weight[0],weight[1],weight[2]);
int maxAge=max(age[0],age[1],age[2]);
System.out.println("身高的最大值为"+maxHeight+".");
System.out.println("体重的最大值为"+maxWeight+".");
System.out.println("年龄的最大值为"+maxAge+".");
}
}
方法头
这部分描述了方法这个程序控件的名称和规格。
返回类型
指的是自我调控的控件,即返回值(方法中返回的数值)的类型。
方法名
指的是方法的名称。方法就是通过该名称由其他控件进行调用。
形参列表
方法中将用于接收“辅助指示”的变量即形参,放在小括号中进行声明。像本方法中这样接收多个形参时要使用逗号隔开。
方法体
方法体就是程序块(即用大括号括起来的0条以上的语句的集合)。
方法max的主体中声明了max变量。原则上,像这样只在方法中使用的变量可以在该方法中声明使用。另外,方法体中可以声明和方法名同名的变量。这是因为方法和变量的类别不同,不会发生名称冲突。
由于方法max已经存在 a,b,c变量(形参),因此不可以在方法体中创建相同名称的变量。
方法的调用
方法的调用是通过在方法名的后面加上小括号来执行。
当调用方法时,程序流程会跳转到该方法中。
在调用方法中,形参变量在创建的同时会初始化为实参的值。
方法接收的形参使用传递的实参值进行初始化。
当形参初始化结束后,方法体开始执行。
return语句
方法调用表达式的值为该方法的返回值
方法max将最大值返回给调用方
return max; //像这样的语句称为return语句
例题
编写一个方法,计算并返回1到n的所有整数和。
package hello01;
import java.util.Scanner;
class day01 {
static int sumUp(int n) {
int i,k=0;
for (i = 1; i <=n; i++) {
k += i;
}
return k;
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n= input.nextInt();
sumUp(n);
System.out.println(sumUp(n));//调用方法 方法名+形参
}
}
void方法
package hello01;
import java.util.Scanner;
class day01 {
static void putStars(int n) {
while (n-->0)
System.out.print('*');
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("显示直角在左下方的三角形。");
System.out.print("层数: ");
int n=input.nextInt();
for(int i=1;i<=n;i++)
{
putStars(i);
System.out.println();
}
}
}
方法putStars会连续显示n个'*'。该方法只用于显示,没有返回值。这种方法的返回类型要声明为void。 注意:不会返回值的方法的返回类型要声明为void。
由于void方法不会返回值,因此return语句也不是必需的。如果在方法的中途要强制将程序流程返回到调用方,可以执行没有返回值的return语句。
return;//返回调用方,但不返回任何值
编写一个显示您好的方法
package hello01;
import java.util.Scanner;
class day01 {
static void hello(String n) {
System.out.println(n);
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String n=input.nextLine();
hello(n);
}
}
其他方法的调用
例如 显示长方形和正方形
package hello01;
import java.util.Scanner;
class day01 {
//连续显示n个字符c
static void putChars(char c,int n) {
while (n-->0)
System.out.print(c);
}
//通过排列字符'+'来显示边长为n的正方形
static void putSquare(int n) {
for(int i=1;i<=n;i++) { //执行n次下述处理
putChars('+',n); //显示n个字符'+'
System.out.println();//换行
}
}
//通过排列字符'*'来显示宽为h长为w的长方形
static void putRectangle(int h,int w) {
for(int i=1;i<=h;i++) { //执行h次下述处理
putChars('*',w);//显示w个字符'*'
System.out.println(); //换行
}
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("显示正方形。");
System.out.print("边长"); int n=input.nextInt();
putSquare(n);
System.out.println("显示长方形");
System.out.print("宽:"); int h= input.nextByte();
System.out.print("长:"); int w= input.nextByte();
putRectangle(h,w);
}
}
方法是程序的一个控件。在创建控件时,如果有其他方便的控件,我们也可以大量地使用
不接收参数的方法
不接收形参的方法在声明时小括号()中是空的。
例如 编写一个三位数相加的程序,由于不接受错误的数值,因此最终一定要回答正确。
package hello01;
import java.util.Random;
import java.util.Scanner;
class day01 {
static Scanner input=new Scanner(System.in);
static boolean confirmRetry() {
int cont;
do {
System.out.print("再来一次?<Yes...1/No...0>:");
cont= input.nextInt();
} while(cont !=0&&cont !=1);
return cont==1;
}
public static void main(String[] args) {
Random rand=new Random();
System.out.println("心算能力训练!!");
do {
int x= rand.nextInt(900)+100;
int y= rand.nextInt(900)+100;
int z= rand.nextInt(900)+100;
while (true) {
System.out.print(x+"+"+y+"+"+z+"=");
int k= input.nextInt();
if(k==x+y+z)
break;
System.out.println("回答错误!!");
}
} while(confirmRetry());
}
}