Java練習十題集(二)java
1.編程輸出如下格式的數據。算法
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
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.編程輸出如下格式的數據。
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:
1
4 5 2
3
when i=2:
1 2
8 9 10 3
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。