第三課算法
方法(函數)
用來完成特定功能的代碼片斷編程
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(); } } }