Java筆記第十二課(數組排序及查找)

數組排序及查找


一.數組排序

1.選擇排序法

思想:
      數組的0索引依次和後面的索引進行比較,對應的元素小的往前方法,依次比較,就可以得到一個排好序的數組

例:

public class ArrayDemo {
	
	public static void main(String[] args) {
		
		//定義一個數組,靜態初始化
		int[] arr = {24,69,80,57,13} ;
		
		//排序前
		System.out.println("排序前:");
		printArray(arr) ;//調用數組遍歷方法
		
		//調用
		selectSort(arr) ;
		System.out.println("排序後:");
		printArray(arr) ;//調用數組遍歷方法

	}
	
	//將選擇排序的代碼封裝成一個獨立的功能
	public static void selectSort(int[] arr){
		for(int x = 0 ;x < arr.length-1 ;x++){
			for(int y = x +1 ; y<arr.length ; y++){
				//判斷
				if(arr[y]<arr[x]){
					int temp = arr[x] ;
					arr[x] = arr[y] ;
					arr[y] = temp ;
				}
			}
		}
	}
數組的遍歷:

public static void printArray(int[] arr){
		System.out.print("[");
		//遍歷數組
		for(int x = 0 ; x < arr.length ; x ++){
			//判斷是否最大索引
			if(x==arr.length-1){
				System.out.println(arr[x]+"]");
			}else{
				System.out.print(arr[x]+", ");
			}
		}
	}

冒泡排序
思想:

兩兩比較,大的往後放,第一次比完,最大值出現在最大索引處,依次進行這樣的比較....

例:

public class ArrayTest {
	
	public static void main(String[] args) {
		
		//定義一個數組,靜態初始化
		int[] arr = {24,69,80,57,13} ;
		
		System.out.println("排序前:");
		//調用遍歷數組
		printArray(arr) ;
		
		bubbleSort(arr) ;
		System.out.println("排序後:");
		printArray(arr) ;//調用遍歷數組

	}
	
	public static void bubbleSort(int[] arr){
		for(int x = 0 ; x < arr.length-1; x ++){
			for(int y = 0 ; y < arr.length-1-x ; y++){
				//判斷
				if(arr[y]>arr[y+1]){
					int temp = arr[y] ;
					arr[y] = arr[y+1] ;
					arr[y+1] = temp ;
				}
			}
		}
	}


二.數組查找

二分法查找數組一定是排好序的

思路:1)定義最小索引和最大索引
   2)計算出中間索引
   3)拿中間索引對應的元素和要查找的元素進行比較
  如果相等:直接返回中間索引
  不相等:
   大了,左邊找   max = mid -1 ;重新獲取最大索引
   小了,右邊找   min = mid +1 ;重新獲取最小索引
                  計算出中間索引   mid = (max+min)/2 ;
  4)回到3)繼續查找

                        5)如果找不到了應該返回-1

public class ArrayDemo1 {
	public static void main(String[] args) {
		//定義一個有序數組
		int [] arr = {13,21,65,71,96};
		int index = getIndex(arr, 65);
		System.out.println("index:"+index); //index:2
	}
	public static int getIndex(int [] arr,int value) {
		// 定義最小索引和最大索引
		int min = 0;
		int max = arr.length - 1;

		int mid = (min + max) / 2;
		while (arr[mid] != value) {

			if (arr[mid] > value) {
				//左邊找
				max = mid - 1;
			} else if (arr[mid] < value) {
				//右邊找
				min = mid + 1;
			}
			if (min > max) {
				return -1;
			}
			//重新計算中間索引
			mid = (min + max) / 2;
		}
		return mid;
	}
}
注意:當需要尋找一個無序數組中某個元素第一次出現的索引時,不能排序後再用二分法查找,因爲這時索引已經發生變化了,由於排序,改變了原來是數組中元素的順序,這時要使用基本查找!

 Arrays類:

此類包含用來操作數組(比如排序和搜索)的各種方法(針對數組操作的工具類)

常用的幾個方法:
   public static String toString(int[] a):將任意類型的數組以字符串形式顯示出來!
   public static void sort(int[] a):快速排序:(將給定數組中元素升序排序)
   public static int binarySearch(int[] a, int key):
  使用二分搜索法來搜索指定的 int 型數組,以獲得指定的值,該數組一定是有序數組

import java.util.Arrays;

public class ArraysDemo {
	public static void main(String[] args) {
		//定義一個數組
		int [] arr = {15,47,35,66,83};
		//public static String toString(int[] a):將任意類型的數組以字符串形式顯示出來!
		System.out.println("toString():"+Arrays.toString(arr));
		//toString():[15, 47, 35, 66, 83]
		//public static void sort(int[] a):快速排序:(將給定數組中元素升序排序)
		Arrays.sort(arr);
		System.out.println("sort():" + Arrays.toString(arr));// sort():[15, 35, 47, 66, 83]
		// public static int binarySearch(int[] a, int key)
		// 查找66元素在數組中的索引
		int index = Arrays.binarySearch(arr, 66);
		System.out.println("index:"+index);//index:3
	}
}

練習:

import java.util.Scanner;

/**
 * 對鍵盤錄入一個字符串中的字符進行排序。
 *		舉例:"dacgebf"
 * 		結果:"abcde
 * 		
 * */
public class ArrayTest {
	public static void main(String[] args) {
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請您輸入一個字符串:");
		String line = sc.nextLine();
		//將字符串轉換成一個字符數組
		char[] chs = line.toCharArray();
		//給字符串冒泡排序
		bubbleSort(chs);
		//將字符數組轉換成字符串
		String result = String.valueOf(chs);
		System.out.println("result:"+result);
		//運行結果
		/*請您輸入一個字符串:
		asdkokjfd
		result:addfjkkos*/
	}
	//冒泡排序
	public static void bubbleSort(char[] chs){
		for(int x = 0 ; x < chs.length-1 ; x ++){
			for(int y = 0 ; y <chs.length-1-x ; y++){
				if(chs[y]>chs[y+1]){
					//中間變量互換
					char temp = chs[y] ;
					chs[y] = chs[y+1] ;
					chs[y+1] = temp ;
				}
			}
		}
	}

}

三.常用類

BigDecimal類

    對於浮點類型的數據類說,他們存儲和整數的存儲是不一致的,是按照有效數字位來進行存儲的,浮點類型的數據計算的時候容易損失精度,計算出來的結果不精確,

Java針對這種情況:提供了這個類
BigDecimal:
   作用:

來提供浮點類型數據的精確計算!可變的、任意精度的有符號十進制數
   構造方式:
   public BigDecimal(String val)


public class BigDecimalDemo {
	
	public static void main(String[] args) {
		
		System.out.println(1.0-0.66);
		System.out.println(0.01+0.09);
		System.out.println(1.4201*100);
		System.out.println(3.141/100);
	}
}

常用的成員方法;
   public BigDecimal add(BigDecimal augend):加
   public BigDecimal subtract(BigDecimal subtrahend):減
  public BigDecimal multiply(BigDecimal multiplicand):乘法
  public BigDecimal divide(BigDecimal divisor):除
   public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
   參數1:商, 參數2:保留幾位小數,參數3:舍入的一種模式:ROUND_HALF_UP

public class BigDecimalDemo2 {
	
	public static void main(String[] args) {
		//創建BigDecimal對象
		BigDecimal bd1 = new BigDecimal("0.01") ;
		BigDecimal bd2 = new BigDecimal("0.09") ;
		
		//public BigDecimal add(BigDecimal augend):加
		System.out.println("add:"+bd1.add(bd2));
		
		BigDecimal bd3 = new BigDecimal("1.0") ;
		BigDecimal bd4 = new BigDecimal("0.32") ;
		
		//public BigDecimal subtract(BigDecimal subtrahend):減
		System.out.println("sub:"+bd3.subtract(bd4));//0.68
		
		//	public BigDecimal multiply(BigDecimal multiplicand):乘法
		BigDecimal bd5 = new BigDecimal("1.501") ;
		BigDecimal bd6 = new BigDecimal("100.0") ;
		System.out.println("mul:"+bd5.multiply(bd6));
		
		//public BigDecimal divide(BigDecimal divisor):除
		BigDecimal bd7 = new BigDecimal("1.301") ;
		BigDecimal bd8 = new BigDecimal("100") ;
		
		System.out.println("div:"+bd7.divide(bd8));
		//public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
		// 					參數1:商,	參數2:保留幾位小數,參數3:舍入的一種模式:ROUND_HALF_UP
		
		System.out.println("div:"+bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));
		System.out.println("div:"+bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP));
		
		
	}
}

BigInteger:

用來計算超出了Integer類型範圍的數據

構造方法
   public BigInteger(String val)將字符串表示的數字封裝成BigInteger類型
   成員方法:
   public BigInteger add(BigInteger val)
  public BigInteger subtract(BigInteger val)
  public BigInteger multiply(BigInteger val)
  public BigInteger divide(BigInteger val)
public BigInteger[] divideAndRemainder(BigInteger val)
  返回一個BigInteger數組,數組中的元素:商,餘數

public class BigIntegerDemo {
	
	public static void main(String[] args) {
		
		//查看Integer類的最大值
		System.out.println(Integer.MAX_VALUE);//2147483647
		
		//創建Integer對象
                //Integer i = new Integer("2147483648") ;// java.lang.NumberFormatException: For input string: "2147483648"
		//當前該數據已經超出了Integer的取值範圍
		//System.out.println(i);
		
		BigInteger i = new BigInteger("2147483648") ;
		System.out.println("i:"+i);
	}
}

public class BigIntegerDemo2 {
	
	public static void main(String[] args) {
		
		//創建BigInteger對象
		BigInteger bg1 = new BigInteger("100") ;
		BigInteger bg2 = new BigInteger("50") ;
		
		//public BigInteger add(BigInteger val)
		System.out.println("add:"+bg1.add(bg2));
		//public BigInteger subtract(BigInteger val)
		System.out.println("sub:"+bg1.subtract(bg2));
		//public BigInteger multiply(BigInteger val)
		System.out.println("mul:"+bg1.multiply(bg2));
		//public BigInteger divide(BigInteger val)
		System.out.println("div:"+bg1.divide(bg2));
		
		BigInteger[] datas = bg1.divideAndRemainder(bg2) ;
		System.out.println("datas[0]:"+datas[0]);//2
		System.out.println("datas[1]:"+datas[1]);//0
		
	}
}

 
 Calendar:日曆類:
   Calendar 類是一個抽象類,它爲特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆字段之間的轉換提供了一些方法,
   併爲操作日曆字段(例如獲得下星期的日期)提供了一些方法
   Calendar該類是一個抽象類:不能實例化的,所以通過一下這個方法來創建對象
   public static Calendar getInstance()
public int get(int field)返回給定日曆字段的值
 
   public static final int YEAR:表示日曆中 的年
  public static final int MONTH:月份:   *是0開始計算的
   public static final int DATE:和DAY_OF_MONTH是同義詞,表示月份中的某天

package org.westos_12_常用類;

import java.util.Calendar;

/**
 * 
 * Calendar:日曆類:
 * 		Calendar 類是一個抽象類,它爲特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆字段之間的轉換提供了一些方法,
 * 					併爲操作日曆字段(例如獲得下星期的日期)提供了一些方法
 * 		Calendar該類是一個抽象類:不能實例化的,所以通過一下這個方法來創建對象
 * 					public static Calendar getInstance()
 * 					public int get(int field)返回給定日曆字段的值
 * 		
 * 		public static final int YEAR:表示日曆中 的年
 * 		public static final int MONTH:月份:   *是0開始計算的
 * 		public static final int DATE:和DAY_OF_MONTH是同義詞,表示月份中的某天
 * */
public class CalendarDemo1 {
	public static void main(String[] args) {
		//public static Calendar getInstance()創建對象
		Calendar calendar = Calendar.getInstance();
		
		// public static final int YEAR  獲取年
		int year = calendar.get(Calendar.YEAR);
		System.out.println(year);
		
		int month = calendar.get(Calendar.MONTH);//獲取年份中的月
		
		int date = calendar.get(Calendar.DATE);// 獲取月份中的天
		System.out.println(year+"年"+(month+1)+"月"+date+"日");//2017年11月9日
	}
}

 Calendar常用的成員方法:

  public abstract void add(int field,int amount)
  爲給定的日曆的字段添加或者減去時間偏移量
   public final void set(int year,int month,int date)
   設置日曆字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

public class CalendarDemo2 {
	
	public static void main(String[] args) {
		
		//創建日曆類對象
		Calendar c = Calendar.getInstance() ;
		
		//獲取年
		int year = c.get(Calendar.YEAR) ;
		//獲取月
		int month = c.get(Calendar.MONTH);
		//獲取月中的天
		int date = c.get(Calendar.DATE);
		
		System.out.println(year+"年"+(month+1)+"月"+date+"日");
		
		
		//需求:三年前的今天
		public abstract void add(int field,int amount)
		c.add(Calendar.YEAR, -3);
		
		//獲取年
		year = c.get(Calendar.YEAR) ;		//月
		month = c.get(Calendar.MONTH) ;
		//天
		date = c.get(Calendar.DATE) ;
		
		System.out.println(year+"年"+(month+1)+"月"+date+"日");
		
		//需求:5年後的十天前
		c.add(Calendar.YEAR, 5) ;
		c.add(Calendar.DATE, -10) ;
		
		//獲取年
		year = c.get(Calendar.YEAR) ;
		//獲取月
		month = c.get(Calendar.MONTH) ;
		//月彙總的天
		date = c.get(Calendar.DATE) ;
		
		System.out.println(year+"年"+(month+1)+"月"+date+"日");
		
		//public final void set(int year, int month, int date)
		c.set(2018,5,20) ;
		//獲取年
		year = c.get(Calendar.YEAR) ;
		//獲取月
		month = c.get(Calendar.MONTH) ;
		//月彙總的天
		date = c.get(Calendar.DATE) ;
		System.out.println(year+"年"+(month+1)+"月"+date+"日");
		
		
	}
}


練習:

鍵盤錄入一個年份,獲取任意一年的二月有多少天

package org.westos.calendar;

import java.util.Calendar;
import java.util.Scanner;

/**
 * 鍵盤錄入一個年份,獲取任意一年的二月有多少天
 * 分析:
 * 		1)創建鍵盤錄入對象,錄入某一個年份
 * 		2)獲取日曆類對象,getInstance()
 * 		3)設置一個日曆字段,年,月,日
 * 			日曆類對象.set(year,2,1):這裏其實表示3月1
 * 		4)將時間往前推一天
 * 			日曆類對象.add(Calendar.DATE,-1) ;
 * 		5)獲取DATE月份中的天,輸出即可
 * 		
 * 
 */
public class CalendarTest {
	
	public static void main(String[] args) {
		
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in) ;
		
		//錄入並接收數據
		System.out.println("請您輸入一個年份:");
		int year = sc.nextInt() ;
		
		//創建日曆類對象
		Calendar c = Calendar.getInstance() ;
		//設置日曆的字段,年,月,日
		c.set(year, 2, 1) ;//其實月份:(month+1):3月1
		
		//將時間往前推算一天
		c.add(Calendar.DATE, -1) ;
		
		System.out.println("任意一年的二月有:"+c.get(Calendar.DATE));
	}
}

  Date類:日期類:
  表示特定的瞬間,精確到毫秒。
  
  常用的構造方式:
  public Date():表示分配的一個Date對象:無參: 通過無參構造獲取當前系統的具體的時間
   public Date(long date):指定一個時間毫秒值  和它1970-1-1 00:00:00有時間差

public class DateDemo1 {
	public static void main(String[] args) {
		
		Date d = new Date();
		System.out.println("當前系統的時間爲:" + d);// 當前系統的時間爲:Thu Nov 09 09:32:51 CST 2017
		// 設置一個時間
		long time = 1000 / 60 / 60;
		Date d2 = new Date(time);
		System.out.println(d2);// 格林威治時間 Thu Jan 01 08:00:00 CST 1970
	}
}
 Date中的兩個成員方法
   public long getTime():獲取當前時間毫秒值
  
  如果知道Date對象,可以通過getTime()獲取時間毫秒值
  public void setTime(long time)
public class DateDemo2 {
	
	public static void main(String[] args) {
		//創建一個日期對象
		Date d = new Date() ;
		System.out.println(d);
		
		//public long getTime():獲取當前時間毫秒值
		long time = d.getTime() ;
        	//System.out.println(time);
		
		//System.out.println(System.currentTimeMillis());//通過System可以獲取當前時間的毫秒數
		
		//public void setTime(long time)
		d.setTime(1000) ;
		System.out.println(d);
	}
}

DateFormat:(抽象類)

將Date對象--->String類型的日期的"文本格式":格式化
   public final String format(Date date)
  String類型日期的"文本格式"---->Date日期對象:解析
   public Date parse(String source) 該方法本身會拋出一個異常:ParseException(解析異常:編譯時期異常)
  
  要進行轉換:必須使用中間橋樑:DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。
   日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和標準化
 
   但是,DateFormat是抽象類,不能直接實例化,使用的是它更具體的子類進行實例化:
   SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類
  
   常用的構造方法:
   Date---格式化--->String文本格式
  
   public SimpleDateFormat(String pattern)用給定的模式和默認語言環境的日期格式符號構造 SimpleDateFormat
 
  

日期和時間模式
  			y			年	比如:2017---->yyyy
  			M			年中的月份:2------>MM
  			d  			月份中的天數 :----->dd
  			H			小時				HH
  			m			小時中的分鐘數	mm
  			s			分鐘中的秒數		ss

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
  
public class DateFormatDemo {
	
	public static void main(String[] args) throws ParseException {
		
		//Date日期對象--->格式化---->String:日期文本格式
		//創建日期對象
		Date d = new Date() ;
		//System.out.println(d);
		
		//創建SimpleDateFormat類對象,用該對象格式化Date對象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
		//格式化
		//public final String format(Date date)
		String dateStr = sdf.format(d) ;
		System.out.println("dateStr:"+dateStr);
		
		System.out.println("-----------------------");
		
		//String日期"文本格式"----->解析----->Date對象
		/**
		 * 注意事項:
		 * 		一定要保證SimpleDateFormat中的String Pattern這個模式和當前給的字符串的文本格式的模式必須一致!
		 */
		String s = "2017-12-30" ;
		
		//創建SimpleDateFormat類的對象,用該對象解析String的日期的"文本格式"
		//SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日") ;
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ;
		//ava.text.ParseException: Unparseable date: "2017-12-30"
		//開始解析
		//public Date parse(String source)
		
		Date d2 = sdf2.parse(s);

		System.out.println("d2:"+d2);
	}
}

DateUtil

這是將Date和String相互轉換的日期工具類

public class DateUtil {
	
	//將無參構造私有化,爲了不讓外界創建對象
	private DateUtil(){
		
	}
	
	/**
	 這是將Date和String相互轉換的日期工具類

	public static String dateToString(Date d,String format){
		//創建SimpleDateFormat對象
		SimpleDateFormat sdf = new SimpleDateFormat(format) ;
		//格式化
		String str = sdf.format(d) ;
		return str ;*/
		
		return new SimpleDateFormat(format).format(d) ;
	}
	/**
	 * 該方法是將String的日期"文本格式"解析成一個Date日期對象
	 * @param s
	 * 		表示需要被解析的日期文本格式
	 * @param format
	 * 		表示解析日期文本格式是需要使用的一種模式
	 * @return
	 * 		返回的就是日期Date對象
	 * @throws ParseException 
	 * 			拋出解析異常
	 */
	public static Date stringToDate(String s,String format) throws ParseException{
		//創建SimpleDateFormat對象
		/*SimpleDateFormat sdf = new SimpleDateFormat(format) ;
		Date date = sdf.parse(s) ;
		return date ;*/
		
		return new SimpleDateFormat(format).parse(s) ;
	}
}

import java.text.ParseException;
import java.util.Date;

/**
 * 日期和String相互轉換的一個測試類
 * @author Apple
 */
public class DateUtilDemo {
	
	public static void main(String[] args) throws ParseException {
		
		//Date--->String
	        創建一個Date對象
		Date d = new Date() ;
		
		//調用功能
		String str = DateUtil.dateToString(d, "yyyy-MM-dd HH:mm:ss") ;
		System.out.println("str:"+str);
		
		String str2 = DateUtil.dateToString(d, "yyyy-MM-dd") ;
		System.out.println("str2:"+str2);
		
		String str3 = DateUtil.dateToString(d, "HH:mm:ss") ;
		System.out.println("str3:"+str3);
		
		//String---->Date
		//模式要和字符串文本格式一致
		String s = "2018-6-25 16:26:21" ;
		//調用功能
		Date date = DateUtil.stringToDate(s, "yyyy-MM-dd HH:mm:ss");
		System.out.println("date"+date);
		
		
		
	}
}
練習:

 鍵盤錄入你的出生年月日,計算你來到這個世界有多少天了?

import java.text.ParseException;
import java.util.Date;
import java.util.Scanner;

/**
 * 分析:
 * 		1)鍵盤鍵盤錄入出生年月日,錄入這一個String類型的數據
 * 		2)創建SimpleDateFormat對象指定一種模式
 * 		3)將當前String日期文本格式轉換成date對象
 * 		4)通過Date對象獲取getTime():獲取時間毫秒值
 * 		5)得到當前系統時間的毫秒值(System.currentTimeMillis)
 * 		6):5)-4)=long 類型的時間
 * 		7)換算成多少天
 * 		8)輸出
 */
public class MyYearOldTest {
	
	public static void main(String[] args) throws ParseException {
		
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in) ;
		
		//錄入並接收數據
		System.out.println("請輸入你的出生年月日: ");
		String line = sc.nextLine() ;
		
		//使用剛纔DateUtil工具類
		Date d = DateUtil.stringToDate(line, "yyyy-MM-dd") ;
		//獲取當前出生年日所在的時間毫秒值
		long oldTime = d.getTime() ;
		//獲取當前系統時間的毫秒值
		long nowTime = System.currentTimeMillis() ;
		
		long time = nowTime - oldTime ;
		
		//換算
		long day = time/1000/60/60/24 ;
		
		//輸出
		System.out.println("你來到這個世界有"+day+"天了");
	}
}


Math類
 Math類提供了一些數學運行的方法
   常用的成員方法:
   public static int abs(int a):絕對值
   public static double ceil(double a):向上取整
   public static double floor(double a):向下取整
   public static double max(double a,double b):獲取最大值
  public static double min(double a,double b):獲取最小值
   public static double pow(double a,double b):a的b次冪
  public static double random():取值範圍:[0.0,1.0)
   public static long round(double a):四捨五入
  public static double sqrt(double a):一個數的正平方根
//import java.util.Scanner;
//JDK5.0以後的新特性;
//import static java.lang.Math.abs; //靜態導入()import static(該方法一定是靜態方法)
public class MathDemo {
	public static void main(String[] args) {
		
		//System.out.println(Math.abs(-100));
		System.out.println(java.lang.Math.abs(-100));
		System.out.println(java.lang.Math.abs(-100));
		
		//public static double ceil(double a):向上取整
		System.out.println("ceil:"+Math.ceil(12.34));
		System.out.println("ceil:"+Math.ceil(12.54));
		
		//public static double floor(double a):向下取整	
		System.out.println("floor:"+Math.floor(12.34));
		System.out.println("floor:"+Math.floor(12.56));
		
		//public static double max(double a,double b):獲取最大值
		System.out.println("max:"+Math.max(Math.max(10,20),30));
		
		//public static double pow(double a,double b):a的b次冪
		System.out.println("pow:"+Math.pow(2, 3));
		
		//public static long round(double a):四捨五入
		System.out.println("round:"+Math.round(12.56));
		
		//public static double sqrt(double a):一個數的正平方跟
		System.out.println("sqrt:"+Math.sqrt(4));
		
	}
	
//	public static void abs(String name){
		
//	}
}
System類:該類沒有構造方法,所以字段和成員方法都用靜態修飾
 
   常用的兩個字段:
   in ,out都和流有關係:java.io...
  
   PrintStream(字節打印流) ps = System.out ;標準輸出流
   PrintWriter(字符打印流)
  
   InputStream in =  System.in;標準輸入流
 
  常用的成員方法:
   public static void gc()運行垃圾回收器。 
調用 gc 方法暗示着 Java 虛擬機做了一些努力來回收未用對象,以便能夠快速地重用這些對象當前佔用的內存,最終調用的就是重寫之後finalize()回收不用
  的對象!
     public static void exit(int status)終止當前正在運行的 Java 虛擬機。參數用作狀態碼;根據慣例,非 0 的狀態碼錶示異常終止。
  public static long currentTimeMillis():返回當前的時間毫秒值


import java.util.Scanner;

public class SystemDemo1 {
	public static void main(String[] args) {
		//創建鍵盤錄入
		//Scanner sc = new Scanner(System.in);
		
		//System.out.println("請您輸入一個數據:");
		//System.out.println("Hello");PrintStream(字節打印流) ps = System.out ;標準輸出流 所以可以將內容打印到控制檯
		/*Student s = new Student("dreamer_96",20);
		System.out.println(s);//沒有重寫toString()時打印地址值
		s = null;
		System.out.println(s);//當前Student變成空了,沒有更多的引用了
		//啓動垃圾回收器
		System.gc();*/
		
       /* System.out.println("爲什麼小孩子不能喝酒....");
		
		//調用exit()方法
		System.exit(0) ;//JVM已經退出了,還可結束循環語句,調用該方法Jvm都退出了,所以循環也就結束了
		
		System.out.println("因爲小孩子不喝酒也很開心啊....");*/
		//public static long currentTimeMillis():返回當前的時間毫秒值
		long time = System.currentTimeMillis();
		System.out.println(time);//1510189151654
		
		//單獨使用沒意義
		//計算某一個應用程序的耗時的毫秒數
		long start = System.currentTimeMillis();
		for(int x =0;x<1000;x++) {
			System.out.println(x);
		}
		long end = System.currentTimeMillis();
		System.out.println("當前for循環語句共耗時:"+(end-start)+"毫秒");//當前for循環語句共耗時:24毫秒
	}
}

System裏面的常用的成員方法:
  public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
   指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束

import java.util.Arrays;

public class SystemDemo2 {
	
	public static void main(String[] args) {
		//定義兩數組
		int[] arr1 = {11,22,33,44,55} ;
		int[] arr2 = {3,4,5,6,7,8} ;
		
		//複製數組
		System.arraycopy(arr1, 2, arr2, 1, 2) ;
		
		//分別將arr1 和arr2數組以字符串形式顯示出來
		System.out.println("arr1:"+Arrays.toString(arr1));  //  arr1:[11, 22, 33, 44, 55]

		System.out.println("arr2:"+Arrays.toString(arr2)); //arr2:[3, 33, 44, 6, 7, 8]
		 
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章