java學習總結——通過題來學習Java(Java基礎語法篇之一)
一.概述
大二痛苦的前十個周後,我終於得到了喘息之機,有時間來回顧一下之前所學到的東西,總結一下之前的所得,嘗試獲取一下新的東西,同時也可能對大家有所幫助。我決定從總結我們做的每一道題來入手,深入的分析它們並且嘗試進行改進,從而達到複習效果,同時希望對和我一樣的剛入門的小白也有幫助。
二.題目集分析
1.是否偶數 (10 分)
本題要求實現一個函數,判盤輸入的整數是否是偶數,如果是偶數,返回true,否則返回false。
函數接口定義:
public static boolean isOdd(int data)
說明:其中 data
是用戶傳入的參數。 data
的值不超過int
的範圍。函數須返回 true
或者 false
。
裁判測試程序樣例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int data=in.nextInt();
System.out.println(isOdd(data));
}
/* 請在這裏給出isOdd(i)函數 */
}
輸入樣例:
8
輸出樣例:
true
分析:Java中充滿了各種方法,我們所熟知的主函數在public類中,就叫做主方法,這裏就是一個最基礎的操作,即自己寫一個可以判斷奇偶數的方法,方法的接口爲public static boolean isOdd(int data),這裏我們可以看到這個方法是一個public類型的方法,也就是說這個方法是公共的,公共方法一般情況下認爲可以跨類使用,而並非僅有此類可以使用,static則將這個方法定義爲一個靜態方法,靜態方法和其他方法不同的是靜態方法會事先加載到內存中去,這裏的意思是指動態方法會隨着實現它的類的對象的出現而可以使用,舉個例子,當Scanner類實現一個Scanner對象後,才能使用各種next,nextInt方法,而static類型的方法是不用這樣的,他們實際上不再受類的控制,而可以隨時獨立的使用,這樣一來,我們也可以稱他們爲函數,主函數就是一個靜態方法,我個人認爲它仍然是一個方法,可能因人而異。boolean代表它的返回類型,boolean可以看到bool,即布爾型,在Java中布爾型有true和false兩個值,即真和假,很容易看出。
實現代碼:
public static boolean isOdd(int data){//函數接口,並傳入參數
if(data%2==0)//如果爲偶數,返回true
return true;
else//否則返回false
return false;
}
總結:這個題目還未涉及一些“更Java”的東西,但是一些不同已經體現出來了,比如函數的聲明中,出現了一些修飾符“public”,“static”,“boolean”,這些修飾符共同定義了這個函數的類型,總體上,他們的優先級爲“方法是否公共,是否靜態方法,返回值類型”,關於是否公共,我們通常有三種方式來描述public,不加,private,public代表它是一個公共方法,不加默認是公共方法,加private是私有方法,這個方法只能在這個類裏使用,同時不能被繼承。而是否靜態這個修飾符通常是不寫,static,不寫的話爲動態,寫static則是靜態方法,至於返回值類型則有很多了,而且我們也比較熟悉。日後會進行更加詳細的總結。而我們發現Java中的一些布爾運算式,條件判斷,返回和C語言差不多,記住即可。
2.人口統計 (10 分)
本題運行時要求鍵盤輸入10個人員的信息(每一個人信息包括:姓名,性別,年齡,民族),要求同學實現一個函數,統計民族是“漢族”的人數。
函數接口定義:
public static int numofHan(String data[])
其中 data[]
是傳入的參數。 data[]
中的每一個元素都是一個完整的人員信息字符串,該字符串由“姓名,性別,年齡,民族”,各項之間用英文半角的逗號分隔。函數須返回 值是漢族的人數。
裁判測試程序樣例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final int HUMANNUM=10;
String persons[]=new String[HUMANNUM];
Scanner in=new Scanner(System.in);
for(int i=0;i<persons.length;i++)
persons[i]=in.nextLine();
int result=numofHan(persons);
System.out.println(result);
}
/*在此處給出函數numofHan()*/
}
輸入樣例:
Tom_1,男,19,漢族
Tom_2,女,18,漢族
Tom_3,男,20,滿族
Tom_4,男,18,漢族
Tom_5,男,19,漢族人
Tom_6,女,17,漢族
Tom_7,男,19,蒙古族
漢族朋友_1,男,18,漢族
Tom_8,male,19,老外
Tom_9,female,20,漢族
輸出樣例:
7
分析:這個題乍一看複雜了起來,涉及鍵盤輸入,字符串處理,對於字符串處理,我們是不需要添加庫文件的,但是對於輸入文字就不是這樣了,同時和C語言也有不小的差別,對於這裏我也仍有些不清楚的地方,比如我們可以動態調用print方法,也可以靜態調用,而對於輸入我們可以用Scanner包,也可以使用StringBuilder包,二者有着不同的操作方法,效率也不是一樣的,這些需要進行更詳細的分析。
代碼實現:
public static int numofHan(String data[])//顯然傳入了一個字符數組的參數
{
int i,han = 0;//設置字符指針和計數器
for(i=0;i<data.length;i++)//對字符數組中的每一個字符串進行遍歷,注意length方法爲獲取字符串長度方法
{
if(data[i].indexOf("漢",4)>0)//indexOf方法可以獲取到一個字符串中指定字符的位置
han++;
}
return han;
}
//關於indexOf方法的詳細解釋,indeOf(查找字符,開始查找位置),如果不添加查找位置,會默認從頭開始查找,因爲字符串其他位置可能存在“漢”這個字,所以我必須把它的起始位置調到防止出現這種誤判情況的最佳位置,這裏我調到了4是因爲在4之前存在可能出現漢字的“姓名”一欄,之後除了民族不會出現,如果這裏的輸入限制沒那麼多,我們仍然可以調節搜索範圍來提高判斷的精度。