轉載:JAVA企業面試題精選 Java基礎 21-30

假裝鎮定發表於2018-09-29

轉載:https://blog.csdn.net/qq_38131668/article/details/75008770

1.21.請寫出求n!的演算法

參考答案:

public class Factorial {

    public static void main(String[] args) {
        long n = 5;
        System.out.println(doFactorial(n));
    }
    
    public static long doFactorial(long n) {
        if (n < 1) {
            System.out.printlin("ERROR");
            return 0;
        } else if (n == 1 || n == 2){
            return n;
        } else {
            return n * doFactorial(n - 1);
        }
    }
}

1.22.排序都有哪幾種方法?

參考答案:

  排序的方法有:插入排序(直接插入排序、希爾排序)、交換排序(氣泡排序、快速排序)、選擇排序(直接選擇排序、堆排序)、歸併排序、分配排序(箱排序、基數排序)。

1.23.寫一個排序演算法,將10個1-100隨機數字進行排序

參考答案:

  選擇排序法實現10個1-100隨機數字的排序,程式碼如下所示:

public class SelectSort {

    public static void main(String[] args) {
        // 定義一個陣列
        int[] num = new int[10];
        for (int i = 0; i < num.length; i++) {
            num[i] = (int)(Math.random() * 100) + 1;
        }
        // 排序
        selectionSort(num);
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }
    }

    // 選擇排序方法
    public static void SelectionSort(int[] number) {
        for (int i = 0; i < number.length - 1; i++) {
            int m = i;
            for (int j = i + 1; j < number.length; j++) {
                if (number[j] < number[m]) {
                    m = j;
                }
            }
            if (i != m) {
                swap(number, i , m);
            }
        }
    }

    // 用於交換陣列中的索引為i、j的元素
    private static void swap(int[] number, int i, int j) {
        int t;
        t = number[i];
        number[i] = number[j];
        number[j] = t;
    }
}

1.24.請用Java語言編寫一個完成氣泡排序演算法的程式

參考答案:

import java.util.Random;
import java.util.Arrays;

public class BubbleSort {

    public static void main(String[] args) {
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            Random ran = new Random();
            arr[i] = ran.nextInt(100);
        }
        System.out.println(Arrays.toString(arr));
        // 氣泡排序
        System.out.println("--------氣泡排序開始--------")
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j+1]) {
                    int t = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = t;
                }
            }   
            System.out.println(Arrays.toString(arr));
        }
        System.out.println("--------氣泡排序結束--------");
        System.out.println(Arrays.toString(arr));
    }
}

1.25.有一陣列a[1000]存放了1000個數,這1000個數取自1-999,且只有兩個相同的數,剩下的998個數不同,寫一個搜尋演算法找出相同的那個數的值?

參考答案:

import java.util.Arrays;

public class SearchDemo {
    /** 被搜尋資料的大小 */
    private static final int size = 1000;
    public static void main(String[] args) {
        int[] data = new int[size];
        // 新增測試資料
        for (int k = 0; k < data.length; k++) {
            data[k] = k + 1;
        }
        data[999] = 567;
        result(data);
    }

    /**
    * 呼叫二分搜尋演算法的方法實現查詢相同元素
    * @param data
    */
    public static void result(int data[]) {
        Arrays.sort(data);
        for (int i = 0; i < data.length; i++) {
            int target = data[i];
            data[i] = 0;
            int result = binaryFind(data, target);
            if (result != -1) {
                System.out.println("相同元素為:" + data[result]);
                break;
            }
        }
    }

    /**
    * 二分搜尋演算法實現
    * 
    * @param data
    *          資料集合
    * @param target
    *          搜尋的資料
    * @return 返回找到的資料的位置,返回-1表示沒有找到
    */
    public static int binaryFind(int[] data, int target) {
        int start = 0;
        int end = data.length - 1);
        while (start <= end) {
            int middleIndex = (start + end) / 2;
            if (target == data[middleIndex]) {
                return middleIndex;
            }
            if (target >= data[middleIndex]) {
                start = middleIndex + 1;
            } else {
                end = middleIndex - 1;
            }
        }
        return -1;
    }
}

1.26.現有一個32位的整型變數value和一個有32個元素的陣列a[32],要求:1、對value隨機賦值;2、讓陣列a[n]的值等於value”位n”的值,0<=n<=31。舉例:如果value的”位0”(Bit0)=0,那麼a[0]=0;如果value的”位10”(Bit10)=1,那麼a[10]=1。

參考答案:

public class Foo {

    public static void main(String[] args) {
        // 產生隨機數
        int random = (int)(Math.random() * Integer.MAX_VALUE + 1);
        // 轉成二進位制字串
        String str = Integer.toBinaryString(random);
        // 轉成二進位制時最前面的零被省略,補上省略掉的0
        if (str.length() < 32) {
            for (int j = 0; j <= 32 - str.length(); j++) {
            str = "0" + str;
            }
        }
        // 給陣列賦值
        int[] a = new int[32];
        for (int i = 0; i < str.length(); i++) {
            a[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
            System.out.println("a[" + i + "]=" + a[i]);
        }
    }
}

1.27.有1~100共一百個自然數,已隨機放入一個有98個元素的陣列a[98]。要求寫出一個儘量簡單的方案,找出沒有被放入陣列的那2個數,並在螢幕上列印這2個數。注意:程式不用考慮實現自然數隨機放入陣列的過程。

參考答案:

    public static void main(String[] args) {
        int[] b = new int[]{ ....存入98個隨機的1100的整數 };
        int[] a = new int[100];
        for (int t : b) {
            a[t-1] = t;
        }
        for (int t = 0; t < a.length; t++) {
            if (a[t] == 0) {
                System.out.println(t + 1);
            }
        }
    }

1.28.用1,2,2,3,4,5這六個數字,用Java寫一個main函式,列印出所有不同的排列,如:512234,412345等,要求:”4”不能在第三位,”3”與”5”不能相連

參考答案:

import java.util.ArrayList;
import java.util.List;

public class Q028 {

    public static List<String> list = new ArrayList<String>();
    public static void group(String str, String nstr) {
        if (str.length() != nstr.length()) {
            String rest = getRest(str, nstr);
            for (int i = 0; i < rest.length(); i++) {
                String temp = str + rest.substring(i, i + 1);
                if (temp.indexOf("4") != 2 && temp.indexOf("35") == -1 && temp.indexOf("53") == -1) {
                    if (!list.contains(temp) && temp.length() == nstr.length()) {
                        list.add(temp);
                    }
                    group(temp, nstr);
                }
            }
        }
    }

    public static String getRest(String str, String nstr) {
        String rest = "";
        if (nstr.length() > str.length()) {
            rest = nstr;
            for (int i = 0; i < str.length(); i++) {
                // 注意此處的replaceFirst,而不是replaceAll
                rest = rest.replaceFirst(str.substring(i, i + 1),"");
            }
        }
        return rest;
    }

    public static void main(String[] args) {
        group("", "122345");
        System.out.println(list.toString());
    }
}

1.29.編寫一個命令列程式,提示讓使用者輸入2個整數,然後計算這2歌整數之間能被5整除的所有整數的和,並列印顯示

參考答案:

import java.util.Arrays;
import java.util.Scanner;

public class Q029 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] nums = new int[2];
        System.out.println("請輸入一個整數:");
        nums[0] = scan.nextInt();
        System.out.println("請輸入第二個整數:");
        nums[1] = scan.nextInt();
        Arrays.sort(nums);
        int sum = 0;
        for (int begin = nums[0] + 1; begin < nums[1]; begin++) {
            if (begin % 5 == 0) {
                sum += begin;
            }
        }
        System.out.println(sum);
    }
}

1.30.編寫一個命令列程式,提示讓使用者輸入使用者名稱和密碼。如果使用者名稱和密碼都是admin,則顯示登入成功;如果不是則顯示登入失敗,讓使用者重新輸入。如果使用者連續3次認證失敗,則鎖定終止程式

參考答案:

import java.util.Scanner;

public class Q030 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int count = 0;
        while (true) {
            System.out.println("請輸入賬號:");
            String name = scan.nextLine();
            System.out.println("請輸入密碼:");
            String pwd = scan.nextLine();
            if ("admin".equals(name) && "admin".equals(pwd)) {
                System.out.println("登入成功");
                break;
            } else {
                count++;
                if (count < 3) {
                    System.out.println("登入失敗,請重新輸入。");
                } else {
                    System.out.println("登入次數過多,認證失敗");
                    break;
                }
            }
        }
    }
}

相關文章