一.经典算法题:百钱买百鸡
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) ;
}
}