第三课算法
方法(函数)
用来完成特定功能的代码片断编程
public class helloworld{
void hello(){} //hello(){} 方法
}函数
方法中的参数
形式参数:在方法被调用时用于接收外界输入的数据spa
实际参数:调用方法时实际传给方法的数据对象
public class helloworld{
void hello(int a,int b){} //括号中的a, b 就是形式参数
public static void main(String[] args){
hello(1,2);} //括号中的1,2就是实际参数
}递归
方法中的返回值
返回值类型:方法要返回的结果的数据类型
若一个方法没有返回值,必须给出返回值类型voidip
返回值:方法在执行完毕后返还给调用者的数据class
return --> 语句终止方法的运行并指定要返回的数据变量
public class helloworld{
int hello(int a,int b){ //返回值类型为int
returne a+b;} //返回值为 a+b 而后就终止方法的运行
public static void main(String[] args){
hello(1,2);}
}原理
方法的调用
对象变量名.方法名(实参列表);
实参的数目、数据类型和次序必须和所调用的方法声明的形参类表匹配
方法的重载
一个类中能够定义有相同一个相同的名字,但参数列表不一样的多个方法
条件:
一、在同一个类中
二、方法名相同
三、参数列表不一样(类型,大小,数量)
class hello{
void name(int a){}
void name(int a,int b){} //hello类里面的方法都是重载
void name(int a,double b){}
void name(){}
}
递归算法
递归算法-3的阶乘
原理图:
public class Test {
public static int multiply(int n){
if( n == 1|| n == 0) {
return 1;
}
else {
return n * multiply(n-1);
}
}
public static void main(String[] args){
System.out.println(multiply(3));
}
}
做业
一、从键盘输入两个数a、b求出其最大公约数和最小公倍数
//最小公约数[最容易理解的]
int a = 4453;
int b = 5767;
int max = a > b? a : b;
int min = a < b? a : b;
if (max % min == 0) {
System.out.println(min);
}else{
for(int i = min; i > 1; i--){
if(a % i == 0 && b % i == 0){
System.out.println(i);
}
}
}
5767÷4453=1余1314
4453÷1314=3余511
1314÷511=2余292
511÷292=1余219
292÷219=1余73
219÷73=3
【展转相除法】
if (a < b) {// a中放大数
int temp = a;
a = b;
b = temp;
}
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
System.out.println("这俩个数的最大公约数是:" + a);
先求最大公约数,最小公倍数就是他们的积除以最大公约
二、输入1个年份,判断该年是不是闰年
//1.普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
//2.世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
//3.对于数值很大的年份,这年若是能整除3200,而且能整除172800则是闰年。如172800年是闰年,86400年不是闰年(由于虽然能整除3200,但不能整除172800)(此按一回归年365天5h48'45.5''计算)。
//彻底数(Perfect number),又称完美数或完备数,是一些特殊的天然数。
它全部的真因子(即除了自身之外的约数)的和(即因子函数),
//刚好等于它自己。若是一个数刚好等于它的因子之和,则称该数为“彻底数”。
三、一个数若是刚好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.
编程找出1000之内的全部完数。
public static void main(String[] args) {
int sum = 0, i, j;
for (i = 1; i <= 1000; i++) {
for (j = 1, sum = 0; j <= i / 2; j++) {
if (i % j == 0)
sum += j;
}
if (sum == i)
System.out.println("完数:" + i);
}
}
四、查找100以内的全部质数
public static void main(String[] args) {
for (int i = 2; i <= 100; i++) {
int temp = (int) Math.sqrt(i);
if (i <= 3) {
System.out.println(i + " is a prime");
} else {
for (int j = 2; j <= i; j++) {
if (i % j == 0) {
break;
}
if (j >= i) {
System.out.println(i + " is a prime");
}
}
}
}
}
五、写程序,分解质因数 eg: 输入 60, 输出 60 = 2 * 2 * 3 * 5
public static void main(String[] args) {
int n = 60;
System.out.print(n + "=");
for (int i = 2; i < n + 1; i++) {
while (n % i == 0 && n != i) {
n /= i;
System.out.print(i + "*");
}
if (n == i) {
System.out.println(i);
break;
}
}
}
6:打印等腰
*
***
*****
*******
*********
***********
*************
***************
*****************
----*
---***
--*****
-*******
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入三角形的层数输入0退出:");
int n = scanner.nextInt();
if(n == 0){
break;
}
for(int i = 1; i <= n; i++){
//打印空格的循环, j < n -i, 由于个数须要动态变化 //而n是固定的,而i是递增的,n - i 递减的 for(int j = 0; j < n-i; j++){ System.out.print("-"); } for(int j = 0; j < 2*i - 1; j++){ System.out.print("*"); } System.out.println(); } //下面一部分 for(int i = n -1; i > 0; i--){ for(int j = 0; j <n - i; j++){ System.out.print("-"); } for(int k = 0; k < 2*i-1; k++){ System.out.print("*"); } System.out.println(); } } }