Java学习_day05_(01 java中的方法、百钱买百鸡的算法)

一.经典算法题:百钱买百鸡

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)5x + 3y + z == 100
并且

2)小鸡的数量 z % 3 == 0

class Test{
	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) ;
				}
			}
		}
	}
}

二.方法

**什么是方法(函数):**为了解决代码重复读高的问题,就使用代码块{}来将大量代码包起来,然后位这个代码块起一个名字,需要该功能时,只需要通过"这个名字"调用即可

举例:
植物大战僵尸游戏(每一个关卡)
豌豆芽:发送炮弹的功能---- 可能需要100行代码

每一个关卡中的豌豆芽的发送炮弹的代码----代码重复度高(冗余)
为了解决这样一个问题: 就使用代码块{}
将这100行代码包起来,然后为这一个代码块起一个名字
以后在使用到豌豆芽发送炮弹的业务功能的时候,只需要通 "这个名字"来调用即可!

将某一个业务逻辑使用独立的{}包起来,然后起名字---->符合"方法的标识符的规则"

举例:
键盘录入的时候 录入int类型
int number = 键盘录入对象.nextInt() ;

Java语言中:如何定义一个方法

有具体返回值类型的方法定义
格式:固定写法:
public static 返回值类型 方法名称(形式参数类型1 变量名1 ,形式参数类型 变量名2…){

需要通过义务逻辑
return 结果数据;
}

有返回值类型的方法定义解释说明

public: 公共的,公开的 权限修饰符
static: 静态的(面向对象讲)

返回值类型:数据类型 : 目前—基本数据类型,以后使用引用数据类型
方法名称:符合 "标识符"的规则:小驼峰命名法(多个单词)
形式参数列表:
形式参数类型1 变量名1 ,形式参数类型 变量名2…

形式参数类型:数据类型 : 目前—基本数据类型,以后使用引用数据类型
变量名:符合 "标识符"的规则 (小驼峰命名法(多个单词) )

方法体中中{}----> 携带一个关键字return :结束当前这个方法并且有一个结果;

注意事项:
有返回值类型的方法的调用
单独调用 :
没有意义:在功能模块中,(代码块中),有返回值类型的方法:业务,返回结果!
在调用者位置输出—main方法中调用这个方法
输出调用:System.out.println(addNumber(a,b));
可以用:不建议,相同获取的结果数据在进行操作,无法操作!
赋值调用(推荐)
int result=addNumber(a,b);
System.out.println(“result:”+result);

需求:
定义两个变量,分别初始化一下,通过一个功能: 求两个数据之和! (类型:int)
附加:定义一个求和功能

class FunctionDemo{
	public static void main(String[] args){
		//定义两个变量
		int a = 10 ;
		int b = 20 ;
		
		//a,b:实际参数
		
		//单独调用 ,没有结果
		//addNumber( a,b ) ;
		
		//输出调用 :可以用:不建议:
		//System.out.println(addNumber(a,b)) ;
		
		//赋值调用
		int result = addNumber(a,b) ; //10,20
		//可以继续使用result数据
		System.out.println("result:"+result) ;
		
	}
	
	/*
		求两个数据之和! (类型:int)
		
		有返回值类型的方法的定义    
		两个明确
			1)明确返回值类型: int 
			2)明确参数类型以及参数个数
				都是int类型,两个
				
		public static 返回值类型 方法名称(形式参数类型1 变量名1 ,形式参数类型 变量名2...){
		
		需要通过义务逻辑
		return 结果数据;
	}
	*/
	public static int addNumber(int a,int b){ //a,b形式参数 
	
			return a + b ;
	}
}

定义方法的注意事项
(1)方法与方法是平级关系
只能调用对方,不能去嵌套使用

(2)定义方法需要明确
1)明确返回值类型
2)明确参数类型以及参数个数

(3)方法的形式参数必须携带数据类型,否则报错(编译通不了)
Java是强制类型语言
---- 前端:javascript(弱类型语言) 定义变量var
public static int add(int a,int b){} function add(a,b){}

(4)返回结果类型需要和最终的接收结果一样!
保证方法体中的类型一致:考虑数据类型
保证:接收的结果类型和方法中携带返回的结果类型一致!

lass FunctionDemo2{
	public static void main(String[] args){
		
		
		//int a = 10 ;
		//int b = 20 ;
		//int c = 30 ;
		
		/*
		public static int add(int a,int b){ //java:14: 错误: 非法的表达式开始
			return a + b ;
		}
		*/
		//赋值调用
		//int result = add(a,b) ; //无法将类 FunctionDemo2中的方法 add应用到给定类型;
								//形式参数格式和实际参数列表不相同
		//正确
		//int result = add(a,b,c) ;
		//System.out.println(result) ;
		
		//int result = add(a,b) ;
		int a = 10 ;
		byte b = 20 ;
		//结果byte
		byte result = add(a,b) ;
		System.out.println(result) ;
	}
	/*
	public static int add( int a ,int  b , int c){
		return a + b + c ;
	}
	*/
	
	public static byte add(int a,byte b){ //形式参数
			//return a + b ; 存在类型提升
			return (byte)(a+b) ; 
	}
}

没有返回值类型的定义:
固定格式:

public static void 方法名(形式参数类型1,变量名1,形式参数类型2,变量名2{
//义务   //获取结果
}

解释说明:
public static:固定写法
void: 关键字
Java中规定:针对没有具体返回值的结果时,方法中必须有’'返回值类型",使用void来代替"返回值类型",来满足格式要求

三.算法题

键盘录入一个整数,计算这个数据每个位上的数据之和!
最终还是求和:
需要中最终变量 sum 从 0开始
录入数据n
1) n获取数据的最低位 % 10
2) 在使用这个数据 对10 取整(去掉低位)

import java.util.Scanner ;
class Test{
	public static void main(String[] args){
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入这个数据
		System.out.println("请输入数据:") ;
		int n = sc.nextInt() ;
		
		//定义一个最终结果变量
		int sum = 0 ;
		//只要这个数据不为0,一直判断 
		//不明确循环次数使用while循环		153
		while(n!=0){
			sum += n % 10 ; //获取低位  		153 % 10 = 3   sum += 3 ;		15 % 10 = 5 
			
			n = n / 10 ; //去掉低位	   	n = 153 / 10 = 15 	
			
		}
		System.out.println("该数据的每个位的数据之和是:"+sum) ;
	}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值