Java練習十題集(二)

Java練習十題集(二)java

1.編程輸出如下格式的數據。算法

When i=0

1編程

When i=1數組

7   8   9
6   1   2
5   4   3 瀏覽器

When i=2 安全

21  22  23  24  25
20    7    8    9  10
19    6    1    2  11
18    5    4    3  12
17  16  15  14  13服務器

2.編程輸出如下格式的數據。cookie

when i=1:網絡

1
4   5   2
3 session

when i=2:

1   2
8   9  10   3

7  12 11  4
6   5 

3.將AB2C3D4ESF6G7H8拆分開來,並分別存入int[]和String[]數組。獲得的結果爲[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H]。
4.使用隨機算法產生一個數,要求把1-1000W之間這些數所有生成。
5.cookie與session的區別於聯繫。

 

 

 

 

 

 

 

1.編程輸出如下格式的數據。

When i=0

1

When i=1

7   8   9
6   1   2
5   4   3

When i=2

21  22  23  24  25
20    7    8    9  10
19    6    1    2  11
18    5    4    3  12
17  16  15  14  13

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Test();
    }

   public static void Test(){
       System.out.print("when i=");
       Scanner scanner = new Scanner(System.in);
       int n = scanner.nextInt();
       int m = 2*n+1;
       int[][] arr = new int[m][m];
       int value =(int)Math.pow(m, 2);
       spiralArray(arr, value, m);
       printMatrix(arr);
   }

    /**
     * 輸出螺旋矩陣
     */
   static int[][] spiralArray( int[][] arr, int value, int n) {
       int start, end, top, bottom;
       start = top = 0;
       end = bottom = n-1;
       while (start<=end||top<=bottom) {
           for (int i = bottom; i >= top; i--) {
               arr[top][i] = value--;
           }
           top++;
           for (int i = top; i <= bottom; i++) {
               arr[i][start] = value--;
           }
           start++;
           for (int i = start; i <= bottom; i++) {
               arr[end][i] = value--;
           }
           end--;
           for (int i = end; i >= top; i--) {
               arr[i][bottom] = value--;
           }
           bottom--;
       }
       return arr;
   }

    /**
     * 打印數組輸出結果
     */
   static void printMatrix( int[][] arr) {
       int n = arr.length;
       System.out.println();
       for (int i = 0; i < n; i++) {
           for (int j = 0; j < n; j++) {
               System.out.print( arr[i][j]+"\t");
           }
           System.out.println();
       }
   }

}

  

2.編程輸出如下格式的數據。

when i=1:


4   5   2
3

when i=2:

1   2 
8   9  10   3

7  12 11  4
6   5 
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Test();
    }

   public static void Test(){
       System.out.print("when i=");
       Scanner scanner = new Scanner(System.in);
       int n = scanner.nextInt();
       int[][] arr = new int[n + 2][n + 2];
       int value = 1;
       arr = outerArray(arr, value, n);
       printMatrix(arr,n);
   }

    /**
     * 單獨處理最外層
     */
   static int[][] outerArray(int[][] arr, int value, int n) {
       for (int i = 0; i < n; i++) {
           arr[0][i] = value++;
       }
       for(int i=1;i<=n;i++) {
           arr[i][n+1] = value++;
       }
       for (int i = n; i > 0; i--) {
           arr[n + 1][i-1] = value++;
       }
       for (int i = n; i > 0; i--) {
           arr[i][0] = value++;
       }
        //中間部分看做螺旋矩陣
       spiralArray(arr, value, n);
       return arr;
   }

    /**
     * 輸出螺旋矩陣
     */
   static int[][] spiralArray( int[][] arr, int value, int n) {
       int start, end, top, bottom;
       start = top = 1;
       end = bottom = n;
       while (start<end||top<bottom) {
           for (int i = start; i <= end; i++) {
               arr[top][i] = value++;
           }
           top++;
           for (int i = top; i <= bottom; i++) {
               arr[i][end] = value++;
           }
           end--;
           for (int i = end; i >= start; i--) {
               arr[bottom][i] = value++;
           }
           bottom--;
           for (int i = bottom; i >= top; i--) {
               arr[i][start] = value++;
           }
           start++;
       }
       /**
        * 若是i是奇數要將中間一位單獨處理,i爲偶數則不須要
        */
       if (n % 2 == 1) {
           arr[(n+1)/2][(n+1)/2] = value;
       }
       return arr;
   }

    /**
     * 打印數組輸出結果
     */
   static void printMatrix( int[][] arr,int n) {
       System.out.println( );
       for (int i = 0; i < arr[0].length - 2; i++) {
           System.out.print(arr[0][i] + "\t");
       }
       System.out.println( );
       for (int i = 1; i < arr.length-1 ; i++) {
           for (int j = 0; j < arr[0].length; j++) {
               System.out.print(arr[i][j] + "\t");
           }
           System.out.println( );
       }
       for (int i = 0; i < arr[0].length - 2; i++) {
           System.out.print(arr[n+1][i] + "\t");
       }
       System.out.println( );
   }

}

  

3.將AB2C3D4ESF6G7H8拆分開來,並分別存入int[]和String[]數組。獲得的結果爲[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H]。

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

public class Test {
    public static void main(String[] args) {
        strTest();
    }

    static void strTest(){
        String str = "AB2C3D4ESF6G7H8";
        List<Character> charList = new ArrayList<>();
        List<Integer> intList = new ArrayList<>();
        for(int i = 0; i < str.length(); i++) {
            char x = str.charAt(i);
            if(x - 'A' >= 0 && x - 'A' <= 26){
                charList.add(x);
            }else if(x - '0' >= 0 && x - '0' <= 10){
                intList.add(Integer.parseInt(x+""));
            }
        }
        int[] nums = new int[intList.size()];
        int i = 0, j = 0;
        for(Integer intObj : intList) {
            nums[i++] = intObj;
        }
        System.out.println(Arrays.toString(nums));
        String[] strs = new String[charList.size()];
        for(Character charObj : charList) {
            strs[j++] =charObj+"";
        }
        System.out.println(Arrays.toString(strs));
    }

}

 

4.使用隨機算法產生一個數,要求把1-1000W之間這些數所有生成。(考察高效率,解決產生衝突的問題)

提升效率的地方有以下:

1.初始化set集合的時候 Sets.newHashSetWithExpectedSize(value),
給初始化帶個固定大小,減小了集合在擴容的時候,值從新複製的問題。這的效率稍有提升。

2.Random random = new Random();放在循環以外。

import com.google.common.collect.Sets;
import java.util.Random;
import java.util.Set;

public class Test {

    public static void main(String[] args) {
        testRandom();
    }

    /**
     * 使用隨機算法產生一個數,要求把1-1000W之間這些數所有生成。
     * (考察高效率,解決產生衝突的問題)
     */
    static void testRandom() {
        int value = 10000000;
        //int類型最大值:2的32次方 - 1 = Integer.MAX_VALUE = 2147483647,二十億多,真夠啦 。
        Set<Integer> result = Sets.newHashSetWithExpectedSize(value);
        Random random = new Random();
        long a = System.currentTimeMillis();
        while (result.size() < value + 1) {
            int i = random.nextInt(value + 1);
            result.add(i);
        }
        System.out.println("\r<br> 執行耗時 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");
        System.out.println("完了,集合大小爲" + result.size());

    }

}

 

5.cookie與session的區別於聯繫。

cookie:
Cookie,有時也用其複數形式Cookies,指某些網站爲了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(一般通過加密 )。Cookie是由服務器端生成,發送給User-Agent(通常是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下 次請求同一網站時就發送該Cookie給服務器(前提是瀏覽器設置爲啓用cookie)
session:
在計算機中,尤爲是在網絡應用中,稱爲「會話控制」。Session對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序 的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,若是該用戶尚未會話,則 Web 服務器將自動建立一個 Session 對象。當會話過時或被放棄後,服務器將終止該會話。
session和cookie的區別:
session是存儲在服務器的,以文本的形勢存儲在硬盤。cookie是存儲在客戶端(瀏覽器),存儲在內存中。當訪問量過多時,會影響服務器的性能,通常使用代理服器存儲session。cookie在瀏覽器能夠修改,安全性低,session安全性高。單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。

相關文章
相關標籤/搜索