1. 程式人生 > >12.25筆記與作業

12.25筆記與作業

1、資料型別:

  數值型:整型{整型(int)、短整型(short)、位元組型(byte)、(長整型 )long}

      浮點型:double、float

  非數值型:字元型(char)、布林型別(boolean)、字串型別(String)、其它引用型別

 

  面試題1:1、請問JAVA中8大基本型別?

      答:數值型:整型(int)、短整型(short)、位元組型(byte)、(長整型 )long

        浮點型:double、float

        非數值型:字元型(char)、布林型別(boolean)

 

2、資料型別轉換:

public class GuanXi {
	public static void main(String[] args) {
		int a = 1;
		double b = a;
		System.out.println(b);
	}
}

  結果為:1.0;

 

  此為自動型別轉換,原則:1、型別可以相容;2、目標型別大於源型別;

public class GuanXi {
	public static void main(String[] args) {
		double a = 12.5;
		int b = (int)a;
		System.out.println(b);
	}
}

  結果為:2;

  此為強制型別轉換,原則:1、型別可以相容;2、目標類弄小於源型別;

 

3、運算子

  a、賦值運算子: =

  b、算術運算子:+、-、*、/、%、++、--、+=、-=、*=、/=

  c、關係運算符:==、!=、>、<、>=、<=

  d、邏輯運算子:&、|、^、!、&&、||

  e、位運算子:&、|、^、~、<<、>>、>>>

  f、條件運算子(也號三目運算子或三元運算子)

    表示式為:

      條件?表示式1:表示式2    即條件為TRUE執行表示式1,FALSE執行表示式2

  

 4、關係運算符:==、!=、>、<、>=、<=

  A、=為賦值運算子,==為等於運算子

  B、關係表示式的結果為布林值

  C、>、<、>=、<=運算子的優先級別高於==、!=

  D、>、<、>=、<=運算子只支援數值類弄的資料比較

 

  PS:基本資料型別在做關係運算時,直接將變數值進行比較運算;引用型資料型別,在做關係運算時,比較的是地址(如String);

  1)、數值型之間的比較運算

package com.java12_25;
//數值型之間的比較運算
public class GuanXi {
	public static void main(String[] args) {
		int a = 12; //聲時變數並賦值
		double b = 11.6; //聲時變數並賦值
		
		System.out.println(12>11.6);//直接數值比較,輸出結果
		//使用變數進行比較,輸出結果
		System.out.println(a>b);
		System.out.println(a>=b);
		
		System.out.println(a==b);
		System.out.println(a!=b);
		
		System.out.println(a<b);
		System.out.println(a<=b);
	}
}

  結果為布林型別,TRUE或FALSE

  面試題2:==與equals的區別

    答:A、==通常作數值的相等關係比較;equals通常作引用型資料型別的相等比較

      B、==比較的是變數的地址是否是同一個地址;equals比較的是變數指向的值是否相同

   如下例:

package com.java12_25;
//字元之前使用==和equals比較
public class GuanXi1 {
	public static void main(String[] args) {
		
		String c = "3"; 
		String d = "3";
		
		System.out.println("相同"=="相同");//字串直接比較,值相同,結果為TRUE
		System.out.println(3==3);//直接進行數值比較與下面變數之間比較做對比
		System.out.println(c==d);//因為二者地址相同,所以結果為TRUE
		System.out.println(c.equals(d));//因equals比較的是二者的數值,所以結果為TRUE		
		
		String a = new String("2");
		String b = new String("2"); //宣告時更換地址
		
		System.out.println(2==2);//直接進行數值比較與下面變數之間比較做對比
		System.out.println(a==b);//因為因為二者地址不相同,儘管數值一樣,但結果為FALSE
		System.out.println(a.equals(b));//因equals比較的是二者的數值,與地址無關,所以結果為TRUE
	}
}

  結果為:

 

5、邏輯運算子:

  &&:短路且,兩個運算元都為TRUE,整個結果為TRUE

  ||:短路或,兩個運算元有一個為TRUE,整個結果為TRUE

  &:邏輯且,兩個運算元都為TRUE,整個結果為TRUE;不論左邊取值,右邊都會進行運算,並且可用於位運算

  |:邏輯或,兩個運算元有一個為TRUE,整個結果為TRUE;不論左邊取值,右邊都會進行運算,並且可用於位運算

  ^:邏輯異或,兩個運算元相同,結果為FALSE;兩個運算元不同,結果為TURE

  !:邏輯反(邏輯非),運算元為TRUE,結果為FALSE;運算元為FALSE,結果為TRUE

   示例:

    1)、&&短路且:左邊表達若為FALSE,則右邊不作運算;||短路或:只要有一個運算元為TRUE,結果TRUE,若左邊為TRUE,右邊不作運算

public class LuoJi {
	public static void main(String[] args) {
		int a = 11;
		int b = 12;
		System.out.println((++a==b)&&(++a!=b));//表示式左邊為TRUE,因此繼續執行右邊,右邊運算結果也為TRUE,結果輸出為TRUE
		System.out.println(a);//左右兩邊都有進行運算,a值為13
		
		System.out.println("---------");
		int c = 13;
		int d = 14;
		System.out.println((++c!=d)&&(++c==d));//表示式左邊運算結果為FALSE,右邊不作運算,直接輸出結果為FALSE
		System.out.println(c);//右邊不作運算,因些c值為14
		
		System.out.println("---------");
		int e = 15;
		int f = 16;
		System.out.println((++e==f)||(++e!=f));//表示式左邊為TRUE,右邊不作運算,只要左右兩邊有一個為TRUE,結果為TRUE
		System.out.println(e);//右邊不作運算,因些c值為16
	}
}

    結果為:

    2)、邏輯&和邏輯|

public class LuoJi1 {
	public static void main(String[] args) {
		int a = 11;
		int b = 12;
		System.out.println((++a==b)&(++a!=b));//表示式左、右邊運算結果為TRUE,結果輸出為TRUE
		System.out.println(a);//左右兩邊都會進行運算,a值為13
		
		System.out.println("---------");
		int c = 13;
		int d = 14;
		System.out.println((++c!=d)&(++c==d));
		//表示式左邊運算結果為FALSE,右邊繼續作運算但不管運算結果為TRUE或FALSE,表示式結果都為FALSE
		System.out.println(c);//左右兩邊都會進行運算,因些c值為15
		
		System.out.println("---------");
		int e = 15;
		int f = 16;
		System.out.println((++e==f)|(++e!=f));
		//表示式左邊為TRUE,右邊繼續運算,不管運算結果為TRUE或FALSE,只要左右兩邊有一個為TRUE,結果為TRUE
		System.out.println(e);//左右兩邊都會進行運算,因些c值為17
	}
}

    結果為:

    3)、邏輯異或:兩個運算元結果相同,結果為FALSE;兩個運算元結果不相同,結果為TRUE

public class LuoJi2 {
	public static void main(String[] args) {
		int a = 11;
		int b = 12;
		System.out.println(!(++a==b));//運算元運算結果為TRUE,非運算後最後結果為FALSE
		System.out.println(a);//a自加,結果為12
		
		System.out.println("-----------");
		
		int c = 13;
		int d = 14;
		System.out.println((a==b)^(++c==d));//左右兩個運算元運算結果相同,邏輯異或運算後結果為FALSE
		System.out.println(c);//c自加,結果為14
		System.out.println((a==b)^(c!=d));//左右兩個運算元運算結果不相同,邏輯異或運算後結果為TRUE
	}
}

    結果為:

 

6、位運算子

  1)、&:按位與:兩個運算元都為1,結果為1

  2)、|:按位或:兩個運算元有一個為1,結果為1

  面試題4:6&7=? 6|7=?

    兩個數值的轉成二進位制數值進行每位的&或者|運算

      6&7=6   6|7=7

        110     110

      &111   | 111

        110     111

public class WeiSuan {
	public static void main(String[] args) {
		System.out.println(6&7);
		System.out.println(6|7);
		//換成二進位制進行運算,結果再換成十進位制輸出
	}
}

  結果為:

  3)、^:按位異或:兩個運算元相同,結果為0,不相同結果為1

      11^12=7  

        1011    

      ^1100  

        0111     

public class WeiSuan1 {
	public static void main(String[] args) {
		System.out.println(11^12);
		//換成二進位制進行運算,結果轉成十制輸出
	}
}

    結果為:

  4)、~:按位非/取反:運算元為1,結果為0,運算元為0,結果為1 ////????

  5)、<<:左移:右側空位補0

  6)、>>:右移:左側空位補最高位,即符號位

  7)、>>>:無符號右移:左側空位補0

    示例:

    面試題3:如何以最快的方式求出2的3次方?

      System.out.println(2<<2);使用位運算子,將2往前移兩位;

public class WeiSuan3 {
	public static void main(String[] args) {
		//求2的3次方
		System.out.println(2*2*2);//正常下操作,相乘輸出即可
		
		System.out.println("--------");
		System.out.println(2<<2);//換算成二進位制00000010,後向右移動2位,左側補0,結果為00001000,輸出十進位制為8
		
		System.out.println("--------");
		System.out.println(50>>3);//換算成二進位制00110010,後向右移動三位,左側補0,結果為110,輸出十進位制為6
		
		System.out.println(50>>>3);//換算成二進位制00110010,後向右移動三位,左側補0,結果為110,輸出十進位制為6
		
	}
}

    結果為:

    面試題5:&和&&的區別

      答:1、&表是邏輯且,無論第一個運算元是否為TRUE,第二個運算元都執行

        &&表示短路且,第一個運算元為FALSE時後面的運算元不執行,返回FALSE

        2、&還可以用作位運算,&&只能做邏輯運算

 

7、條件表示式:也三目表示式或三元表示式

    條件?表示式1:表示式2

      條件為TRUE,執行表示式1,反之執行表示式2

    PS:如果要用一個變數接收表示式結果,表示式後面兩個結果型別要一樣

  示例:

 

import java.util.Scanner;

public class TiaoJian {
	public static void main(String[] args) {
		Scanner cxj = new Scanner(System.in);
		System.out.println("請輸入第一個數:");
		int a = cxj.nextInt();
		System.out.println("請輸入第二個數:");
		int b = cxj.nextInt();;
		int c = a<b?a:b;//對鍵盤上輸入的兩個數值進行比較,若第一個數小於第二個數,則輸出第一個數,反之輸出第二個數
		System.out.println(c);
	}
}

 

    執行示例結果:

 

作業:

  1、銀行提供了整存整取定期儲蓄業務,其存期為一年、兩年、三年、五年到期憑存單支取本息。

    年利率為一年:2.25%;

        兩年:2.7%;

        三年:3.24%;

        五年:3.6%;

    編寫一個程式,輸入存入的本金數目,計算假設存一年、兩年、三年或五年到期取款時銀行應支付的本息多少?(以課本結果為標準編寫)

import java.util.*;
public class BenJin {
	public static void main(String[] args) {
		double benjin;
		System.out.println("請輸入本金:");
		Scanner input = new Scanner(System.in);
		benjin = input.nextDouble();
		System.out.println("本金是:"+benjin);
		
		//計算每年的利息加本金
		double benxi1 = benjin + benjin*0.0225;
		System.out.println("第一年的本息是:"+benxi1);
		
		double benxi2 = benjin + benjin*0.027*2;
		System.out.println("第二年的本息是:"+benxi2);
		
		double benxi3 = benjin + benjin*0.0324*3;
		System.out.println("第三年的本息是:"+benxi3);
		
		double benxi5 = benjin + benjin*0.036*5;
		System.out.println("第五年的本息是:"+benxi5);
		
	}
}

    結果為:

 

預習:

流程控制--選擇結構與迴圈結構

1、流程控制結構:順序結構、選擇結構和迴圈結構

  1)、順序結構:程式從上向下依次執行每條語句的結構;

  2)、選擇結構:根據條件判斷的結果來選擇執行不同的程式碼;

      有if控制語句和switch語句

  3)、迴圈結構:根據判斷條件來重複性地執行某段程式碼;

      有while語句、do-while語句、for語句

2、選擇結構有if控制語句和switch語句

  1)、if控制語句有3種不同的形式,分別為單分支結構、雙分支結構和多分支結構

    A、單分支結構:

    if(表示式){

      語句;

    }

    a、if為關鍵字;

    b、表示式為布林型別的表示式,結果為true或false;

    B、雙分支結構:

    if(表示式){

      語句1;

    }else{

      語句2;

    }

    執行步驟:

      對錶達式進行判斷,結果為true,則執行語句1;反之執行語句2;

    PS:else子句不能單獨使用,必須是IF語句的一部分,與最近的if語句配對使用;else後可再進行if語句,進行多分支選擇