第7天 Java基礎語法(練習加強+在eclipse中實現)
阿新 • • 發佈:2018-12-16
第7天 Java基礎語法 今日內容介紹 迴圈練習 陣列方法練習
第1章 迴圈練習 1.1 編寫程式求 1+3+5+7+……+99 的和值。 題目分析: 通過觀察發現,本題目要實現的奇數(範圍1-100之間)的累加和。
- 為了記錄累加和的值,我們需要定義一個儲存累加和的變數
- 我們要獲取到1-100範圍內的數
- 判斷當前數是否為奇數,是奇數,完成累加和操作
- 累加完畢後,最終顯示下累加和的值 解題步驟:
- 定義一個用來記錄累加和的變數
- 使用for迴圈語句,完成1-100之間每個數的獲取
- 使用if條件語句,判斷當前數是否是奇數,是奇數,進行累加和操作
- 使用輸出語句,列印累加和變數的值
/* * 1.1 編寫程式求 1+3+5+7+……+99 的和值 * 實現步驟: * 1.定義一個用來記錄累加和的變數sum * 2.使用for迴圈,完成1-100之間每個奇數的獲取 * 採用for(int i = 1; i < 100; i += 2) * 3.在for迴圈中,與sum進行累加,求和 * 4.使用輸出語句,列印累加和變數的值sum */ public class LoopTest { public static void main(String[] args) { //1.定義一個用來記錄累加和的變數sum int sum = 0; //2.使用for迴圈,完成1-100之間每個奇數的獲取 for (int i = 1; i < 100; i += 2) { //3.在for迴圈中,與sum進行累加,求和 sum += i; } //4.使用輸出語句,列印累加和變數的值sum System.out.println("1-100之間的奇數累加和:" + sum); } }
1.2 輸出所有的水仙花數,所謂水仙花數是指一個數3位數,其每位數字立方和等於其本身,如153 = 111 + 333 + 555 題目分析: 通過觀察發現,本題目要實現列印符合要求的數字(即水仙花數)。
- 明確什麼樣的數就是水仙花數。水仙花數是指一個3位數(100-999之間),其每位數字立方之和等於該3位數本身。如153 = 111 + 333 + 555, 即 3位數本身 = 百位數立方 + 十位數立方 + 個位數立方;
- 獲取水仙花範圍內的所有3位數(100-999之間的每個3位數)
- 判斷該3位數是否滿足水仙花數,滿足,列印該3位數 解題步驟:
- 使用for迴圈,得到100-999之間的每個3位數
- 獲取3位數中百位數字、十位數字、個位數字
- 使用if條件語句,判斷該3位數是否滿足水仙花數,滿足,使用輸出語句,列印該3位數
/* * 1.2 輸出所有的水仙花數,所謂水仙花數是指一個數3位數,其每位數字立方和等於其本身, * 如153 = 1*1*1 + 3*3*3 + 5*5*5 * 實現步驟: * 1.定義變數儲存 三個數位的整數int * 2.利用迴圈,迴圈中的變數,從100變化到999 * 3.在迴圈中得到的三位數,拆解成三個獨立的數位 * 4.將三個數位的各自立方求和計算,求和後的數,用if條件語句 * 與她自己進行匹配,符合就是水仙花數,否則繼續迴圈遍歷 * 5.當找到水仙花數,用輸出列印該水仙花數 */ public class LoopTest1 { public static void main(String[] args) { //1.定義變數儲存 三個數位的整數int int bai = 0; int shi = 0; int ge = 0; //2.利用迴圈,迴圈中的變數,從100變化到999 for (int i = 100; i <= 999; i++) { //3.在迴圈中得到的三位數,拆解成三個獨立的數位 bai = i / 100; shi = i / 10 % 10; ge = i % 10; //4.將三個數位的各自立方求和計算,求和後的數,用if條件語句 // 與她自己進行匹配,符合就是水仙花數,否則繼續迴圈遍歷 if(bai * bai * bai + shi * shi * shi + ge * ge * ge == i){ //5.當找到水仙花數,用輸出列印該水仙花數 System.out.println("水仙花數:" + i); } } } }
1.3 ASCII編碼表 American Standard Code for Information Interchange,美國標準資訊交換程式碼. 數字0-9對應ASCII編碼十進位制為48-57, 字母a-z對應ASCII編碼十進位制為97-122,字母A-Z對應ASCII編碼十進位制為65-90
/*
* 1.3 char型別儲存
* 數字0-9對應ASCII編碼十進位制為48-57,
* 字母a-z對應ASCII編碼十進位制為97-122,
* 字母A-Z對應ASCII編碼十進位制為65-90
* a.取值範圍
* short:佔兩個位元組,是有符號資料,取值範圍-2^15 - 2^15 (-32767-32767)
* char:佔兩個位元組,是無符號資料,取值範圍0-2^16 (0-65536)
* b.型別轉換
* char型別的資料參加運算時,需要轉換成int資料型別
* c.案例程式碼
* ASCII編碼表演示
* 字元JAVA 資料型別,char
* 整數JAVA 資料型別,int
*
* int型別 和char資料型別轉換
* char兩個位元組,int四個位元組
*
* char轉成int資料型別的時候,型別自動提升,char資料型別,會查詢編碼表,得到整數
* int轉成char型別的時候,需要強制型別轉換,會查詢編碼表
*
* char儲存漢字,查詢Unicode編碼表
*
* char可以和int計算,提升為int型別,記憶體中兩個位元組
*
*/
public class LoopTest2 {
public static void main(String[] args) {
char c = 'a';
int i = c + 1;
System.out.println(i);
int j = 90;
char h = (char) j;
System.out.println(h);
System.out.println((char)6);
char k = '你';
System.out.println(k);
//char m = -1;
}
}
1.4 利用for迴圈列印ABCDEFG…XYZ,26個大寫字母與26個小寫字母 題目分析: 通過觀察發現,本題目要實現列印26個大寫字母、26個小寫字母
- 一共26個大小寫字母,那麼,可以考慮迴圈26次。在每次迴圈中,完成指定字母的大小寫列印
- 找出ABCDEFG…XYZ這些字母之間的變化規律
通過ASCII表發現,後面的字母比它前面的字母,ASCII值大1
下一個字母 = 上一個字母 + 1
如: A B C D
65 66 67 68
- 在每次迴圈中列印上一個字母大小寫,並指定下一個字母 解題步驟:
- 定義初始化大寫變數,值為’A’; 初始化小寫變數,值為’a’
- 使用for迴圈,進行26次迴圈
- 在每次迴圈中,列印大寫字母、小寫字母。 每次列印完成後,更新大寫字母值、小寫字母值
/*
* 1.4 利用for迴圈列印ABCDEFG...XYZ,26個大寫字母與26個小寫字母
* 實現步驟:
* 1.定義初始化大寫變數,值為'A';初始化小寫變數,值為'a'
* 2.使用for迴圈,進行26次迴圈
* 3.在每次迴圈的過程中,列印大寫字母和小寫字母(與此同時,更新大寫字母,小寫字母)
*/
public class LoopTest3 {
public static void main(String[] args) {
//1.定義初始化大寫變數,值為'A';初始化小寫變數,值為'a'
char da = 'A';
char xiao = 'a';
//2.使用for迴圈,進行26次迴圈
for (int i = 0; i < 26; i++) {
//3.在每次迴圈的過程中,列印大寫字母和小寫字母(與此同時,更新大寫字母,小寫字母)
System.out.println("大寫字母:" + da + " 小寫字母:" + xiao);
da++;
xiao++;
}
}
}
1.5 利用for迴圈列印 9*9 表? 如:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
import java.util.Scanner;
/*
* 1.5 利用for迴圈列印 9*9 表?
* 實現步驟:
* 1.定義一個外層for迴圈,初始值從1開始,迴圈9次,用來控制列印的行數
* 2.在外層for迴圈內部,定義一個for迴圈,
* 初始值從1開始,迴圈次數與當前行數相等,用來完成每行列印指定次數的乘法公式
* 3.在內層for迴圈中,完成每行指定次數的乘法公式列印
* 4.在外層for迴圈中,當每行指定次數的乘法公式列印完畢後,通過System.out.println();切換到下一行
* 這樣,再次列印乘法公式時,就在下一行輸出列印了
*/
public class LoopTest4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//列印n * n乘法表
System.out.println("請輸入你想列印乘法表的維數:");
int index = sc.nextInt();
System.out.println("如下列印:" + index + " * " + index + " 乘法表");
print99(index);
}
public static void print99(int index){
//1.定義一個外層for迴圈,初始值從1開始,迴圈index次,用來控制列印的行數
for (int i = 1; i <= index; i++) {
//2.在外層for迴圈內部,定義一個for迴圈
for (int j = 1; j <= i; j++) {
//3.在內層for迴圈中,完成每行指定次數的乘法公式列印
System.out.print(j + " * " + i + " = " + i * j + "\t");
}
//4.在外層for迴圈中,當每行指定次數的乘法公式列印完畢後,通過System.out.println();
System.out.println();
}
}
}
第2章 陣列方法練習 2.1 定義列印陣列元素方法,按照給定的格式列印[11, 33, 44, 22, 55] 題目分析: 通過觀察發現,本題目要實現按照指定格式,列印陣列元素操作
- 通過迴圈,我們可以完成陣列中元素的獲取,陣列名[索引]
- 觀察發現,每個陣列元素之間加入了一個逗號”,”進行分隔;並且,整個陣列的前後有一對中括號”[]”包裹陣列所有元素。 解題步驟:
- 使用輸出語句完成列印 左邊的中括號”[”
- 使用迴圈,輸出陣列元素值。輸出元素值分為兩種情況,如下: a) 最後一個數組元素,加上一個右邊的中括號”]” b) 非最後一個數組元素,加上一個逗號”,”
/*
* 2.1 定義列印陣列元素方法,按照給定的格式列印[11, 33, 44, 22, 55]
* 實現步驟:
* 1.定義方法實現陣列的遍歷
* 2.先列印括號--[
* 3.遍歷陣列
* 判斷是否遍歷到了陣列的最後一個元素,如果是最後一個元素,輸出括號]
* (這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行,
* 否則:輸出陣列的元素和逗號(這樣列印元素,不需要換行,保證元素顯示在同一行))
*/
public class ArrayMethodTest {
public static void main(String[] args) {
//1.定義一個數組
int[] arr = {11, 33, 44, 22, 55};
print(arr);
}
/*
* 定義方法實現陣列的遍歷
* 返回值:void
* 引數:陣列
*/
public static void print(int[] arr){
//1.列印括號[ 不要換行
System.out.print("[");
//2.遍歷陣列
for(int i = 0; i < arr.length; i++){
//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
if(i == arr.length -1){
//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
System.out.println(arr[i] + "]");
}else{
//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
System.out.print(arr[i] + ",");
}
}
}
}
2.2 陣列元素逆序
/*
* 2.2 陣列元素逆序
* 實現步驟:
* 1.利用for迴圈,實現陣列遍歷,遍歷過程中,最遠端換位
* 2.for的第一項,定義兩個變數,判斷條件:min <= max,增量min++,max--
* min索引和max索引的元素進行交換
* (使用臨時的第三方變數進行換成min索引對應元素,之後在賦值給max索引對應元素)
*/
public class ArrayMethodTest1 {
public static void main(String[] args) {
//1.定義一個數組
int[] arr = {11, 33, 44, 22, 55};
//2.先列印一把陣列,看陣列正常
print(arr);
//3.將陣列逆序
reverse(arr);
//4.檢視陣列逆序後的情況
print(arr);
}
/*
* 定義方法實現陣列的遍歷
* 返回值:void
* 引數:陣列
*/
public static void print(int[] arr){
//1.列印括號[ 不要換行
System.out.print("[");
//2.遍歷陣列
for(int i = 0; i < arr.length; i++){
//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
if(i == arr.length -1){
//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
System.out.println(arr[i] + "]");
}else{
//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
System.out.print(arr[i] + ",");
}
}
}
/*
* 定義方法,實現陣列的逆序
* 返回值:void
* 引數:陣列
*/
public static void reverse(int[] arr){
//利用迴圈,實現陣列遍歷,遍歷過程中,最遠端換位
//for的第一項,定義兩個變數
for (int min = 0,max = arr.length -1; min <= max; min++,max--) {
//對陣列中的元素,進行位置交換
//min索引和max索引的元素進行交換
//定義變數,儲存min索引
int temp = arr[min];
//max索引上的元素,賦值給min索引
arr[min] = arr[max];
//將臨時變數中快取的資料,賦值給max序列
arr[max] = temp;
}
}
}
2.3 陣列元素選擇排序
/*
* 陣列的排序:一般是升序,元素,從小到大的排列
*
* 兩種排序的方式:
* 選擇排序:陣列的每個元素都進行比較
* 氣泡排序:陣列中的相鄰元素進行比較
* 規則:比較大小,位置交換
*
*/
public class ArrayMethodTest2 {
public static void main(String[] args) {
//1.給定一個需要排序的陣列
int[] arr = {3,1,5,-8,0,9,2};
//2.呼叫選擇排序方法
selectSort(arr);
//3.實現陣列的遍歷列印
print(arr);
}
/*
* 定義方法實現陣列的選擇排序
* 返回值:void
* 引數:陣列
*/
public static void selectSort(int[] arr){
//外迴圈,選擇排序,外迴圈需要arr.length-1次數
for(int i = 0; i < arr.length - 1;i++){
//內迴圈,是每次都在減少,修改變數定義
for(int j = i + 1; j < arr.length;j++){
//陣列的元素進行判斷,從小到大的順序,排列的陣列中的元素
if(arr[i] > arr[j]){
//陣列中元素交換位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
/*
* 定義方法實現陣列的遍歷
* 返回值:void
* 引數:陣列
*/
public static void print(int[] arr){
//1.列印括號[ 不要換行
System.out.print("[");
//2.遍歷陣列
for(int i = 0; i < arr.length; i++){
//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
if(i == arr.length -1){
//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
System.out.println(arr[i] + "]");
}else{
//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
System.out.print(arr[i] + ",");
}
}
}
}
2.4 陣列元素氣泡排序
/*
* 陣列的氣泡排序法:陣列的相鄰元素進行比較大小,交換位置
* N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i-1)次(i = 0,1,2)
* 所以可以用雙重迴圈語句,外層控制迴圈多少趟,內層控制每一趟的迴圈次數
* 實現步驟:
* 1.進行外迴圈,氣泡排序,外迴圈需要arr.length-1次數
* 2.進行內迴圈,內迴圈進行相鄰元素大小比較,根據升序交換位置,內迴圈結束一趟,出來一個最大值
* 等又一次外迴圈,已經出來的最大的數,就無需進行納入比較中,但是,其他繼續相鄰元素比較大小,
* 直至所有最大的數出來
*/
public class ArrayMethodTest3 {
public static void main(String[] args) {
//1.給定一個需要排序的陣列
int[] arr = {3,1,5,-8,0,9,2};
//2.呼叫氣泡排序方法
bubbleSort(arr);
//3.實現陣列的遍歷列印
print(arr);
}
/*
* 氣泡排序法
* 返回值:void
* 引數:陣列
* N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i-1)次 (i = 0,1,2)
*/
public static void bubbleSort(int[] arr){
//1.進行外迴圈,氣泡排序,外迴圈需要arr.length-1次數,總共進行N-1趟排序
for(int i = 0; i < arr.length - 1; i++){
//2.進行內迴圈,內迴圈進行相鄰元素大小比較,每i趟的排序次數為(N-i-1)次
//故內迴圈:判斷條件為:j < arr.length - 1 - i
for(int j = 0; j < arr.length - 1 - i;j++){
//3.根據升序交換位置
if(arr[j] > arr[j+1]){
//4.進行交換陣列中的元素位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
/*
* 定義方法實現陣列的遍歷
* 返回值:void
* 引數:陣列
*/
public static void print(int[] arr){
//1.列印括號[ 不要換行
System.out.print("[");
//2.遍歷陣列
for(int i = 0; i < arr.length; i++){
//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
if(i == arr.length -1){
//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
System.out.println(arr[i] + "]");
}else{
//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
System.out.print(arr[i] + ",");
}
}
}
}
2.5 陣列元素普通查詢 2.6 陣列元素二分查詢(折半查詢)
/*
* 二分查詢法:
* 在一個數組中,找到一個元素,是否存在於陣列中,如果存在,就返回索引
*實現步驟:
* 1.三個指標變數mid min max
* 2.進行迴圈折半:可以折半的條件min <= max (需要用到的迴圈體是while迴圈體-因為不知道具體需要多少次遍歷)
* 3.迴圈體中,公式計算中間索引
* 4.迴圈體中,讓被查詢的元素與中間的索引所對應的元素進行比較:
* 4.1.key < arr[mid]: max = mid - 1
* 4.2.key > arr[mid]: min = mid + 1
* 4.3.key == arr[mid]:return mid
* 5.若迴圈體結束,元素沒有找到,沒有找到索引,需要返回-1,代表元素沒有找到
* 普通查詢法:
* 找到元素在陣列中出現的索引,如果沒有這個元素,結果就是負數
*/
public class findArrayTest {
public static void main(String[] args) {
//1.給定一個已經排好序的陣列
int[] arr = {1,2,3,4,5};
//2.呼叫二分查詢法
int index = binarySearch(arr,4);
if(index != -1){
System.out.println("陣列中查詢到該元素,該元素的索引為:" + index);
}else{
System.out.println("陣列中沒有找到該元素!");
}
//3.普通查詢
int index1 = search(arr,4);
if(index1 != -1){
System.out.println("陣列中查詢到該元素,該元素的索引為:" + index1);
}else{
System.out.println("陣列中沒有找到該元素!");
}
}
/*
* 定義方法,實現折半查詢
* 返回值:索引
* 引數:陣列,需要查詢的元素
*/
public static int binarySearch(int[] arr,int key){
//1.三個指標變數mid min max
int min = 0;
int max = arr.length - 1;
int mid = 0;
//2.進行迴圈折半:可以折半的條件min <= max (需要用到的迴圈體是while迴圈體-因為不知道具體需要多少次遍歷)
while(min <= max){
//3 公式計算中間索引
mid = (min + max) / 2;
//4.迴圈體中,讓被查詢的元素與中間的索引所對應的元素進行比較:
if(key < arr[mid]){
//4.1.key < arr[mid]: max = mid - 1
max = mid - 1;
}else if(key > arr[mid]){
//4.2.key > arr[mid]: min = mid + 1
min = mid + 1;
}else{
//4.3.key == arr[mid]:return mid
return mid;
}
}
//5.迴圈體結束,元素沒有找到,需要返回-1,代表元素沒有找到
return -1;
}
/*
* 定義方法,實現陣列的普通查詢
* 返回值:索引int
* 引數:陣列,查詢的元素
* 實現步驟:
* 1.for迴圈遍歷陣列
* 2.遍歷過程中,遍歷陣列中的元素與查詢的元素進行比較
* 符合:返回索引
* 不符合:繼續遍歷陣列,直至結束
* 3.若遍歷結束,沒有找到索引,返回-1,代表陣列中沒有該元素
*/
public static int search(int[] arr,int key){
//1.for迴圈遍歷陣列
for (int i = 0; i < arr.length; i++) {
//2.遍歷過程中,遍歷陣列中的元素與查詢的元素進行比較
if(arr[i] == key){
return i;
}
}
//3.若遍歷結束,沒有找到索引,返回-1,代表陣列中沒有該元素
return -1;
}
}