Educoder - Java入門 - 數組進階各關卡題目總結


第1關:數組的復制

1、編程要求:
  在右側編輯器 Begin-End中填充代碼,將 arr1數組中的數據全部復制給 arr2數組,最后輸出 arr2中所有的數據。
 
2、測試效果:
  我會對你的程序進行測試,如下:
  測試輸入: 1312
  預期輸出:
   1
  3
  12
  測試輸入: 21311
  預期輸出:
  2
  13
   11
 
3、程序設計思路:
 (1)數組的數組名中儲存的實際是數組的地址值,所以不能用數組名直接復制。
 (2)采用for循環將arr1里面的元素循環賦予arr2里面的元素。
 
4、程序實現:
package step1;

import java.util.Scanner;

public class HelloWorld {
    public static void main(String[] args) {
        //動態構建arr1
        int[] arr1 = new int[3];
        Scanner sc = new Scanner(System.in);
        for(int i = 0 ; i< arr1.length ; i++){
            arr1[i] = sc.nextInt();
        }
        /********** Begin **********/
        //創建數組arr2
        int[] arr2 = new int[3];

        //使用for循環將arr1的數據復制給arr2
        for(int j =0 ; j<arr1.length ; j++){
           arr2[j] =arr1[j];
           System.out.println(arr2[j]);
        }
        /********** End **********/
    }
}

 

 

第2關:數組中元素的查找

1、編程要求:

  在右側編輯器Begin-end處填充代碼,實現在數組中查找指定字符串位置的功能。

 

2、測試效果:

  測試輸入:張三

  預期輸出:張三在數組的第1個位置

  測試輸入:張富貴

  預期輸出:張富貴在數組的第5個位置

 

3、程序實現:

package step2;

import java.util.Scanner;

public class HelloWorld {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        //str為要查找的字符串
        String str = sc.next();        
        /********** Begin **********/
        //創建數組   arr  給數組賦值 {"張三","張三豐","張無忌","王二麻子","張富貴"}
        String[] arr =new String[]{"張三","張三豐","張無忌","王二麻子","張富貴"};
        for(int i=0;i<5;i++){
            if(str.equals(arr[i])){
                System.out.println(str+"在數組的第"+(i+1)+"個位置");
            }
        }    
        /********** End **********/
    }
}

 

4、題目總結:

 (1)變量被創建的時候就相當於在內存中開辟空間,==比較的是兩個對象的內存地址,重新創建的變量與原變量內存地址不同,所以不能用==比較。

 (2)若沒有進行對象創建,而是僅僅對相同類型變量進行了兩次聲明,兩個變量內存地址相同。

   如String str = "hello"String str1 = "hello"沒有進行對象的創建,而是同時指向的一個對象,所以他們的內存地址是相同的。

 

 

第3關:交換算法

1、編程要求:

  是時候檢驗一下啦,在右側編輯器Begin-end中填充代碼,完成兩個變量的交換吧。

 

2、測試效果:

  測試輸入:35

  預期輸出:

  5

  3

  測試輸入:4,2

  預期輸出:

  2

  4

 

3、程序設計思路:

  兩個變量數值的交換有三種換發:

 (1)借助中間量交換 (開發常用)  

     理解:三個杯子,兩杯裝水,其中一個空杯子用作容器。

int x = 10; 
int y = 20; 
int z = x; 
x = y; 
y = z; 

 (2)位移運算交換 (面試常用)    

        理解:涉及到了異或運算符的規則:一個數對另一個數位異或兩次,該數不變

int x = 10; 
int y = 20; 
x = x ^ y; 
y = x ^ y; 
x = x ^ y;

 (3)數值相加減交換

    理解:先求得兩數的和再進行減運算 

int x = 10; 
int y = 20; 
x = x + y; 
y = x - y; 
x = x - y; 

 

4、程序實現:

package step3;

import java.util.Scanner;

public class HelloWorld {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        /********** Begin **********/
        //將a的值賦給b   b的值賦給a
        int i =b;
        b=a;
        a=i;
        /********** End **********/
        System.out.println(a);
        System.out.println(b);
    }
    
}

 

 

第4關:選擇排序

1、編程要求:

  在右側Begin-End區域中添加代碼,實現對數組arr的降序排序,並輸出排序后的arr數組。

 

2、測試效果:

  我會對你的程序進行測試;

  預期輸入:6650289

  預期輸出:[9, 8, 6, 5, 2, 0]

  預期輸入:4312113

  預期輸出:[13, 12, 3, 1]

 

3、程序設計思路:

 (1)首先思考內層循環,對數組進行降序排序,也就是要將元素按從大到小排列到數組中,首先就是想辦法把最大值放到首位。

 (2)首位解決了,要循環重復第(1)步操作,值得注意的是首位不需要考慮,所以在內層循環的變量初始值要做出改變。

 

4、程序實現:

package step4;
import java.util.Arrays;
import java.util.Scanner;
public class HelloWorld {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //動態創建數組
        int[] arr = new int[sc.nextInt()];
        for(int i = 0 ; i< arr.length ; i++){
            arr[i] = sc.nextInt();
        }
        /********** Begin **********/
        for (int j = 0; j < arr.length - 1; j++) {
            for (int i = j; i < arr.length -1; i++) {
                if(arr[j] < arr[i+1]){    
                    int temp = arr[j];
                    arr[j] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
        /********** End **********/
    }
}

 

5、題目總結:

 (1)對於數組的輸出有更簡單的方法:Arrays.toString(數組)可以直接輸出數組中的值。

 (2)選擇排序更優化方法思考。

 

 

第5關:冒泡排序

1、編程要求:

  在編輯器Begin-end處填充代碼,使用冒泡排序對數組arr進行升序排序,最后輸出排序之后數組arr中的數據。

 

2、測試效果:

  預期輸入:6958026

  預期輸出:[0, 2, 5, 6, 8, 9]

  預期輸入:4312130

  預期輸出:[0, 3, 12, 13]

 

3、程序設計思路:

  (1)將序列當中的左右元素,依次比較,如果左邊的元素大於右邊元素則交換位置,保證右邊的元素始終大於左邊的元素。

  (2) 第一輪結束后,序列最后一個元素一定是當前序列的最大值。

  (3)對序列當中剩下的n-1個元素再次執行步驟1。對於長度為n的序列,一共需要執行n-1輪比較。

 

4、程序實現:

package step5;
import java.util.Arrays;
import java.util.Scanner;
public class HelloWorld {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //動態創建數組
        int[] arr = new int[sc.nextInt()];
        for(int i = 0 ; i< arr.length ; i++){
            arr[i] = sc.nextInt();
        }
        /********** Begin **********/
        for(int j = 1 ; j< arr.length;j++){
            for (int i = 0; i < arr.length -j; i++) {
                if(arr[i] > arr[i+1]){
                    int temp = arr[i];//交換位置
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
        /********** End **********/
    }
}    

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM