Java学习笔记七
16.
看一下java application ,的 main 方法:
publicstatic void main(String[] args)
{},其實 是接收一個字符串數組的方法,在學習相關只是之前,我們可以利用run configuration 選項 來為main方法傳遞參數:通過argument(參數)選項,中間用空格隔開。
對于本身就帶有空格的參數來講,可以使用雙引號,包裹。
17.
統計一下輸出的 a,b,c,出現的次數
為什么選用 HashMap,因為這是符合它的特性的,這道題中可以令 key 為數值,令value 作為出現的次數,這樣做,前者不會重復,后者可以累加,首先取出元素判斷(利用get方法取出,不存在會打出null),元素是否出現在集合中,如果真為 null,那就直接加進去,如果不是null,證明已經存在了,在累加一就可以了;
package com.jianjian3;
?
import java.util.HashMap;
public class HashMapTest
{
?? public static void main(String[] args)
?? {
????? HashMap map = new HashMap();
?????
????? for(int i = 0; i < args.length;i++)
????? {
??????? System.out.println(args[i]);
??????? if(map.get(args[i]) ==null )
???????
?????????? map.put(args[i],new Integer(1));
?????????? else
?????????? {
?
?????????? Integer in = (Integer)map.get(args[i]);
?
?????????? in = new Integer(in.intValue() + 1);
?
?????????? map.put(args[i],in);
?
?????????? }
???????
??????????
??????????
???????
????? }
????? System.out.println(map);
?? }
}
18.
學了那么久的集合,用一道題來總結一下;
還是那道題,輸出10 ——50之間每個數字出現的次數;
并且打印出出現次數最多的數字和次數;
如果沒有出現則不顯示
注意的點
1:包裝類的實現
2 :如何遍歷map;
3:一定要理解并掌握,放入和取出key value 的 if else 方法;
4:掌握專門為集合提供方法的類Collections的方法作用;
5:在Map 中有 keySet()可以返回 key的集合,有values(),可以返回value的集合,而Collections的方法都是針對集合(collection)的方法;比如這次要找最大值;Collections.max(collection)
?
package com.jianjian2;
?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
?
public class JianjianTest
{
?? public static void main(String[] args)
?? {
????? Map map = new HashMap();
????? Random random = new Random();
//如果想更好的輸出結果,可以換成
//Map map = new TreeMap;這樣集合就變得有序了;
????? for(int i = 0 ; i < 50 ; i ++)
????? {
??????? int in = random.nextInt(41) + 10;
????? System.out.println(in);
??????? Integern1 = new Integer(in);
??????? if(map.get(n1)==null)
??????? {
?????????? map.put(n1,newInteger(1));
??????? }
??????? else
??????? {
?????????? int n2 = ((Integer)map.get(n1)).intValue() + 1;
?????????? Integern3 = new Integer(n2);
?????????? map.put(n1,n3);
??????????
??????? }
???????
????? }
????? Set set = map.keySet();
????? for(Iterator? ite = set.iterator();ite.hasNext();)
????? {
??????? Integern4 = (Integer)ite.next();
??????? Integern5 = (Integer)map.get(n4);
??????? System.out.println(n4 +":" + n5);
????? }?
Integer? n6 = (Integer)Collections.max(map.keySet());
//加上這句的意思是找出key 的最大值;簡單;
?
?
//??? System.out.println(map);
?? }
}
19.
局部變量必須要賦初值后才可以被使用,即被定義在方法中的局部變量,而全局變量不需要,如果沒有被賦初值的話,他們都有自己的默認值!一般是定義在類中的方法;
package com.jianjian2;
?
public class Test5
{
?? static? int a ;
?? public static void main(String[] args)
?? {?
????? int b;
????? System.out.println(a);
????? System.out.println(b);
?? }
}
這樣 a可以被打印出來,但是b不可以被打印出來。
?
20.
彩票概率事件:
如果必須從1? - 50 之間的數字中取六個數字來抽獎,那么會有多少種情況呢:
、package com.jianjian2;
?
import java.util.Scanner;
?
public class LotteryOddsTest
{
?? static int lotteryOdds = 1;
?? public static void main(String[] args)
?? {
????? Scanner s = new Scanner(System.in);
????? System.out.print("Pleaseenter the nums you will draw :");
????? 6
????? 50
????? int i = s.nextInt();
????? System.out.println();
????? System.out.print("Pleaseenter the total nums:");
????? int j = s.nextInt();
????? System.out.println();
????? for(int m = 1 ; m <= i; m ++)
????? {
??????? lotteryOdds =lotteryOdds *(j - m + 1)/m;
????? }
????? System.out.println("thelotteryodds is "+lotteryOdds);
?????
?? }
}
21.
continue 語句用于跳出當前循環,回到循環首部,不結束,break語句用于跳出循環。
22.
如果想快速去的數組中的所有數據,可以調用Arrays中的toString()方法,返回一個包含數組元素的字符串,這些元素被放置在括號內,并用逗號隔開。
?
?
package com.jianjian2;
?
import java.util.Arrays;
?
public class ArrayTest
{
?? public static void main(String[] args)
?? {
????? int[] a = {1,2,3,4,5,6,7,8,9,10};
????? System.out.println(Arrays.toString(a));
?? }
}
輸出[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
?
23.
數組的長度可以為零
?
24.
想要實現自由的拷貝數組,即自己決定拷貝目標數組的起始位置;這個方法位于System.arrayCopy();里面,方法接收五個參數
(目標數組名,目標數組拷貝起始位置(其實是下表為止index),帶拷貝數組,待拷貝數組起始位置,拷貝個數),待拷貝數組拷貝時會覆蓋原來數組中的元素
?
?
package com.jianjian2;
?
import java.util.Arrays;
?
public class ArrayTest3
{
?? public static void main(String[] args)
?? {
????? int[] a = {1,2,3,4,5};
????? int[] b = {6,7,8,9,10};
????? System.arraycopy(a,2,b,2,3);
????? System.out.println(Arrays.toString(b));
??
?? }
}
輸出結果是:6,7,3,4,5
?
?
25.
現在改進一下,從1 – 49 中隨機抽取 6 個數字,不能重復
看似簡單,其實有幾個難點:
1:要用數組做,要用隨機做,但是隨機肯定有可能會生成重復的數字,不管是隨機數組元素,還是隨機下標都是不行的,解決的方法就是先定義一個數組,存放1 – 49個數字,而后再去取元素的時候,取元素的下標,然后去除該下標元素的方法就是將數組中的最后一個數值改寫它,比如說:數組 a[]存放元素,取完元素后 a[r] = a[n-1],
n --
就是將原數組的最大值賦給 a[r]為什么要這么做;無外乎有兩種情況,就是未賦值之前,a[r]就是等于了 a[n - 1],這樣,a[n - 1]不存在,符合要求;二是不等于,這樣最大值沒有被取到,就把最大值換給 a[r],這樣就解決了這個問題;
?
?
package com.jianjian2;
?
import java.util.Arrays;
import java.util.Random;
?
public class RandomTest2
{
?? public static void main(String[] args)
?? {
????? Random random =? new Random();
????? int[] a =newint[49];
????? for(int i = 0 ; i < a.length; i++)
????? {
??????? a[i] = i + 1;
???????
????? }
????? int[] b =newint[6];
????? for(int i = 0 ; i < b.length;i ++)
????? {
??????? int r = random.nextInt(49) ;
??????? b[i] = a[r];
??????? a[r] = a[a.length - i - 1];
????? }
????? System.out.println(Arrays.toString(b));
?????
?? }
}
26.
要想快速地打印一個二維數組的元素列表,可以調用:
System.out.println(Arrays.deepToString(s));
?
27.
日期估計在今后的編程中會很常見,在java中采用 GregorianCalendar()定義時間,也就是西歷,我們所說的公歷,同樣具有set與get方法用以放入和取出日期,還有就是,類中有默認的日期。
?
28.
方法重載的陷阱:java允許重載任何方法,而不只是構造器方法,因此要完整的描述一個方法,需要指出方法名以及參數類型。這叫做方法的簽名(signature)。但是返回類型不是方法簽名的一部分。也就是說,不能有兩個名字相同、參數類型也相同卻返回不同類型值的方法。
?
29.
任何java程序都應該有一個main方法這句話是不對的,使用static代碼塊就不需要:
class StaticTest
{
?? static {
?? system.out.println(“hello world ”);
}
}
也是會打印出hello world 的;
?
30.
一個類可以使用所屬包中的所有類,以及其他包中的共有類。
?
總結