一、实战:百钱买百鸡
example:
5文钱可以买1只公鸡,
3 文钱可以买一只母鸡,
1文钱可以买3 只小鸡。
用100 文钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
/*
分析:
当前公鸡,母鸡,小鸡三个变量:分别使用x,y,z
x,y,z 三个未知数:使用传统比较麻烦
公鸡的数量: 5文钱一只(100元钱----公鸡) :20
母鸡的数量: 3文钱一只(100元素----母鸡) :33
小鸡的数量: z = 100 -x - y ;
for循环遍历:将x,y的数量一一获取
x :0 -20
y: 0 - 33
z = 100 -x - y ;
需要满足条件:
1)5*x + 3*y + z == 100
并且
2)小鸡的数量 z % 3 == 0
在工具:idea/eclipse中使用debug模式启动:
当程序出问题/或者是 看一下程序的运行的先后顺序: 方便开发者观察代码!
在工具中:在方法中有效代码的第一行打断点: 在idea中代码的左边行号位置!
*/
//code:
class ChickenPurchase{
public static void main(String[] args){
//for循环:先去遍历 公鸡 数量
for(int x = 0 ; x <= 20 ; x ++){
//x的数量获取到 :公鸡
for(int y = 0 ; y <= 33 ; y ++){
//母鸡的数量
//小鸡的数量
int z = 100 - x - y ;
//满足的条件
//三个数据的总价钱100
if((5*x + 3*y + z/3 ==100) && (z % 3 == 0) ){
//分别输出x,z,z
System.out.println("公鸡的数量是:"+x+
",母鸡的数量是:"+y+",小鸡的数量是:"+z) ;
}
}
}
}
}
二、方法
- 定义:
将这多行代码包起来,然后为这一个代码块起一个名字,以后在使用到业务功能的时候,只需要通 "这个名字"来调用即可!
将某一个业务逻辑使用独立的{}包起来,然后起名字→符合"方法的标识符的规则"
example:
键盘录入的时候 录入int类型
int number = 键盘录入对象.nextInt() ;
- 方法的定义规则:
(1). 有具体返回值类型的方法定义:(固定写法)
public static 返回值类型 方法名称 (形式参数列表){
方法业务逻辑;
//return;
}
1). 有返回值类型的方法定义解释说明:
①. public: 公共的,公开的 权限修饰符
②. static: 静态的(面向对象)
③. 返回值类型:
数据类型 :目前—基本数据类型,以后使用引用数据类型;
④. 方法名称:符合 "标识符"的规则:小驼峰命名法(多个单词)
⑤. 形式参数列表:
形式参数类型1 变量名1 ,形式参数类型 变量名2…
形式参数类型:数据类型 : 目前—基本数据类型,以后使用引用数据类型
变量名:符合 "标识符"的规则 (小驼峰命名法(多个单词) )
⑥. 方法体中中{}----> 携带一个关键字return :结束当前这个方法并且有一个结果;
2). 有返回值类型的方法的调用 :
①. 单独调用 :
没有意义:在功能模块中,(代码块中),有返回值类型的方法:业务,返回结果!
在调用者位置输出—main方法中调用这个方法
②. 输出调用
可以用:不建议,相同获取的结果数据在进行操作,无法操作!
③. 赋值调用(推荐)
3). 有返回值类型的方法的注意事项:
①. 方法与方法是平级关系 ,只能调用对方,不能去嵌套使用;
②. 定义方法需要明确:
①. 明确返回值类型;
②. 明确参数类型以及参数个数;
③. 方法的形式参数必须携带数据类型,否则报错(编译通不了);
Java是强制类型语言 ---- 前端:javascript(弱类型语言) 定义变量var
public static int add(int a,int b){}
function add(a,b){}
④. 返回结果类型需要和最终的接收结果一样!
保证方法体中的类型一致:考虑数据类型;
保证:接收的结果类型和方法中携带返回的结果类型一致!
example:
有返回值类型的方法:
class FunctionDemo{
public static void main(String[] args){
//定义两个变量
int a = 10 ;
int b = 20 ;
//a,b:实际参数
//赋值调用
int result = addNumber(a,b) ; //10,20
//可以继续使用result数据
System.out.println("result:"+result) ;
}
/*
求两个数据之和! (类型:int)
public static 返回值类型 方法名称(形式参数类型1 变量名1 ,形式参数类型 变量名2...){
需要通过义务逻辑
return 结果数据;
}
*/
public static int addNumber(int a,int b){ //a,b形式参数
return a + b ;
}
}
(2). 没有返回值类型的定义:(固定的格式)
public static 返回值类型 方法名(形式参数类型1 变量名1 ,形式类型2 变量名2...)
{
//业务
//获取结果
}
1). 解释说明:
①. public static :固定写法
②. void:关键字
Java中规定:针对没有具体返回值的结果的时候,但是方法中必须"返回值类型"
使用void来替代"返回值类型" :满足格式要求!
③. 方法名称符合 "标识符"的规则:小驼峰命名法(多个单词)
④.形式参数列表:
形式参数类型1 变量名1 ,形式参数类型 变量名2…
形式参数类型:数据类型 : 目前—基本数据类型,以后使用引用数据类型
变量名:符合 "标识符"的规则 (小驼峰命名法(多个单词) )
2). 没有返回值类型的方法的调用 :
①. 单独调用 :
example:
printStar(5,6) ;
System.out.println("----------") ;
printStar(6,7) ;
②. 输出调用:(不可以)
//输出调用? 不可以
System.out.printnln(printStar(5,6)) ;
③. 赋值调用:(不可以)
//赋值调用 :用不了: 没有结果
void v = printStar(5,5) ; //错误: 非法的表达式开始 :void只是替代 "返回值类型"
3). 没有返回值类型的方法的注意事项:
两个明确:
①. 明确返回值类型: 没有具体结果: void 代替;
②. 明确参数类型以及参数个数;
int 行数和列;
example:
没有返回值类型的方法:
class FunctionDemo2{
public static void main(String[] args){
//for循环的嵌套
for(int x = 0 ; x < 4 ; x ++){ //控制行数
for(int y = 0 ; y < 5 ;y ++) { //控制列数
System.out.print("*") ;
}
System.out.println() ;
}
System.out.println("-------------------------------------") ;
//单独调用
printStar(5,6) ;
System.out.println("----------") ;
printStar(6,7) ;
}
public static void printStar(int m,int n){
for(int x = 0 ; x < m ; x ++){ //控制行数
for(int y = 0 ; y < n ;y ++) { //控制列数
System.out.print("*") ;
}
System.out.println() ;
}
}
}
examples:
/*
使用方法改进!(定义方法的时候:两个明确)
键盘录入两个数据,比较两个数据的最大值
键盘录入三个数据,比较三个数据的最大值
*/
import java.util.Scanner;
class Test{
public static void main(String[] args){
键盘录入两个数据,比较两个数据是否相等
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请输入第一个数据:") ;
int a = sc.nextInt() ;
System.out.println("请输入第二个数据:") ;
int b = sc.nextInt() ;
//调用方法
boolean flag = compare(a,b) ;
System.out.println("flag:"+flag) ;
System.out.println("-------------------------------------") ;
//键盘录入三个数据,比较三个数据的最大值
System.out.println("请输入第一个数据:") ;
int m = sc.nextInt() ;
System.out.println("请输入第二个数据:") ;
int n = sc.nextInt() ;
System.out.println("请输入第三个数据:") ;
int z = sc.nextInt() ;
//调用方法
int max = getMax(m,n,z) ;
System.out.println("三个数据中的最大值是:"+max) ;
}
/*
比较三个数据的最大值
两个明确
明确返回值类型: int
明确参数类型以及参数 个数
int,三个
*/
public static int getMax(int a,int b,int c){ //形式参数必须带类型:Java强类型语言
//可以使用三元+中间变量
//可以使用if...else...
//定义变量
int max ;
if(a>b){
if(a>c){
max = a ;
}else{
max = c ;
}
}else{
if(b > c){
max = b ;
}else{
max = c ;
}
}
return max ;
}
/*
比较两个数据是否相等
两个明确
1)明确返回值类型: boolean
2)明确参数类型以及参数个数
int类型 和2个参数
*/
public static boolean compare(int x,int y){
// boolean flag = (x == y )? true :false ;
//return flag ;
//改进
return x == y ;
}
}