畢向東Java基礎(chǔ)教程-Java基礎(chǔ)語法【下】

本篇為Java基礎(chǔ)語法【下】,包含程序流程控制、函數(shù)、數(shù)組這三部分內(nèi)容。


程序流程控制

順序結(jié)構(gòu)

判斷結(jié)構(gòu)

三種格式:

/*=======第一種格式=======*/
if(條件表達(dá)式)
{
    執(zhí)行語句;
}

/*=======第二種格式=======*/
if(條件表達(dá)式)
{
    執(zhí)行語句;
}
else
{
    執(zhí)行語句;
}

/*=======第三種格式=======*/
if(條件表達(dá)式)
{
    執(zhí)行語句;
}
else if(條件表達(dá)式)
{
    執(zhí)行語句;
}
...
else
{
    執(zhí)行語句;
}

注意:

  • if語句后若未寫大括號(hào),那就只能控制離它最近的單條語句。

  • if else與三元運(yùn)算符的區(qū)別在于:三元運(yùn)算符由于是運(yùn)算符,因此必須有結(jié)果。

  • Java語言中語句一般有兩種結(jié)束方式:以分號(hào);或后大括號(hào)}結(jié)束,以}結(jié)束的一般為流程控制語句。

  • Example1:if語句無控制體的情況

    if(false);
    {
        System.out.println("Hello World!");  //會(huì)打印Hello World!,實(shí)際上if沒有控制體,大括號(hào)內(nèi)容叫做局部代碼塊
    }
    

    Example2:局部代碼塊

    {
       int m = 89;
       System.out.println("Hello World!..."+m);
    }
    System.out.println("Over..."+m);        //編譯報(bào)錯(cuò)
    

    局部代碼塊一執(zhí)行完,m變量在內(nèi)存中就會(huì)被釋放,因此局部代碼塊可以定義局部變量的生命周期。為了節(jié)約內(nèi)存空間,在確保后面不會(huì)在使用此變量的情況下,可以使用局部代碼塊的形式,執(zhí)行完后,其空間就會(huì)被騰出來(虛擬機(jī)在內(nèi)存當(dāng)中開辟的空間是有限的,除非在啟動(dòng)虛擬機(jī)的時(shí)候設(shè)置需要的空間)。

選擇結(jié)構(gòu)

格式:

switch(表達(dá)式)
{
    case 取值1:
        執(zhí)行語句;
        break;
    case 取值2:
        執(zhí)行語句;
        break; 
    ...
    default:
        執(zhí)行語句;
        break;
}

特點(diǎn):

  • switch能判斷的數(shù)據(jù)類型有限,只有四種:byte, short, int, char(Java1.5 為switch增加了枚舉類型,Java1.7 增加了字符串類型)。

  • 程序一執(zhí)行到switch,會(huì)把大括號(hào)內(nèi)所有的語句加載到內(nèi)存中。

  • switch中條件放置無順序,但執(zhí)行有順序。
    Example1:即使default放在第一位,也會(huì)先判斷case

    switch(表達(dá)式)
    {
        default:
            執(zhí)行語句;
            break;
      case 取值1:
            執(zhí)行語句;
            break;
        case 取值2:
            執(zhí)行語句;
            break; 
        ...
    }
    
  • 程序遇到滿足條件的值后,如果沒有break,則會(huì)繼續(xù)向下執(zhí)行,之后的case不再進(jìn)行判斷,直接執(zhí)行里面的語句,直到遇到break或執(zhí)行到大括號(hào)終結(jié)。
    Example2

    int x = 2;
    swtich(x)
    {
        default:
          System.out.println("d");
          //break;
        case 4:
          System.out.println("a");
          //break; 
        case 1:
          System.out.println("b");
          break;
        case 3:
          System.out.println("c");
          break;
    }
    //輸出結(jié)果為d, a, b
    
  • Example3:多個(gè)值,對(duì)應(yīng)相同執(zhí)行語句

    int month = 3;
    switch(month)
    {
        case 3:
        case 4:
            System.out.println(month+"月對(duì)應(yīng)的是春季");
            break;
    }
    

    執(zhí)行到case 3,滿足條件,但沒有執(zhí)行語句和break,繼續(xù)往下執(zhí)行并且不判斷,執(zhí)行完case 4中的語句再break。

ifswtich的應(yīng)用:

  • if
    1. 對(duì)具體的值進(jìn)行判斷
    2. 對(duì)值的區(qū)間進(jìn)行判斷
    3. 對(duì)運(yùn)算結(jié)果是boolean類型的表達(dá)式進(jìn)行判斷
  • switch
    1. 對(duì)具體的值進(jìn)行判斷
    2. 值的個(gè)數(shù)通常是固定的

對(duì)于幾個(gè)固定的值判斷,建議使用switch語句,因?yàn)槠鋾?huì)將具體的答案都加載進(jìn)內(nèi)存,效率相對(duì)高一點(diǎn)。
常用的為if,不建議用switch語句,因?yàn)槠涔δ苄暂^差,且書寫麻煩。

循環(huán)結(jié)構(gòu)

三種格式:

/*=======while語句格式=======*/
while(條件表達(dá)式)
{
    執(zhí)行語句;
}

/*=======do while語句格式=======*/
do
{
    執(zhí)行語句;
}while(條件表達(dá)式);

/*=======for語句格式=======*/
for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)后的操作表達(dá)式)
{
    執(zhí)行語句;(循環(huán)體)
}

特點(diǎn):

  • do while:無論條件是否滿足,循環(huán)體至少執(zhí)行一次。

  • for的三個(gè)表達(dá)式運(yùn)行順序:初始化表達(dá)式只執(zhí)行一次;判斷循環(huán)條件,為真就執(zhí)行循環(huán)體,再執(zhí)行循環(huán)后的操作表達(dá)式,接著繼續(xù)判斷循環(huán)條件,重復(fù)整個(gè)過程,直到條件不滿足為止。

  • whilefor可以互換,區(qū)別在于for為了循環(huán)而定義的變量在for循環(huán)結(jié)束就在內(nèi)存中釋放,而while循環(huán)使用的變量在循環(huán)結(jié)束后還可以繼續(xù)使用。

  • 最簡單無限循環(huán)格式:while(true),for(;;),無限循環(huán)存在的原因是并不知道循環(huán)多少次,而是根據(jù)某些條件,來控制循環(huán)(for兩邊的表達(dá)式可以不寫,中間不寫會(huì)默認(rèn)為true)。

  • Example1:while語句錯(cuò)誤寫法

    while(條件表達(dá)式);  //while語句后加分號(hào),會(huì)一直循環(huán)
    {
        執(zhí)行語句;
    }
    
  • Example2: for第一和第三個(gè)表達(dá)式的非常規(guī)寫法

    int x = 1;
    for(System.out.println("a");x<3;System.out.println("c"))
    {
        System.out.println("d");
        x++;
    }
    //輸出 a d c d c
    //注意能執(zhí)行成功,只要滿足表達(dá)式的條件即可
    

應(yīng)用:
Example3: 打印九九乘法表

for(int x = 1; x <= 9; x++)
{
    for(int y = 1; y <= x; y++)
    {
        System.out.print(y + "*" + x + "=" + y * x + "\t"); // "\t":制表符,可以用來對(duì)齊
    }
    System.out.println();
}

輸出結(jié)果為

常用轉(zhuǎn)義符:

  • n:回車

  • t:制表符

  • b:退格

  • r:按下回車鍵
    windows系統(tǒng)中回車符其實(shí)是由rn這兩個(gè)符號(hào)組成的,linux中回車符是n,dos可以識(shí)別nrn,但是windows的一些軟件中只能識(shí)別rn。
    Example4:打印帶雙引號(hào)的hello world

    System.out.println(""hello world"");//錯(cuò)誤寫法,會(huì)識(shí)別成前兩個(gè)雙引號(hào)為一對(duì)
    System.out.println("\"hello world\"");//正確寫法
    

    Example5:打印帶反斜杠的hello world

    System.out.println("\\hello world");
    

其他流程控制語句

break(跳出):應(yīng)用于選擇結(jié)構(gòu)(swtich)和循環(huán)結(jié)構(gòu)(loop)
contine(繼續(xù)):應(yīng)用于循環(huán)結(jié)構(gòu)(loop)

注意:

  • 這兩個(gè)語句離開應(yīng)用范圍就無意義。

  • 這兩個(gè)語句單獨(dú)存在下面都不可以有語句,因?yàn)閳?zhí)行不到。

  • 如果出現(xiàn)了循環(huán)嵌套,break要跳出指定循環(huán),可以通過標(biāo)號(hào)實(shí)現(xiàn)——標(biāo)號(hào)的出現(xiàn),可以讓這兩個(gè)語句作用于指定的范圍(標(biāo)號(hào)用得并不多)。
    Example

    xiaoqiang:for(int x=0; x<3; x++)
    {
        wangcai:for(int y=0; y<4; y++)
        {
            System.our.println("x=" + x);
            break xiaoqiang;
        }
    }
    xiaoqiang:for(int x=0; x<3; x++)
    {
        wangcai:for(int y=0; y<4; y++)
        {
            System.our.println("x=" + x);
            continue xiaoqiang;
        }
    }
    

函數(shù)

函數(shù)的定義

什么是函數(shù)?

  • 函數(shù)就是定義在類中的具有特定功能的一段獨(dú)立小程序
  • 函數(shù)也稱為方法

函數(shù)的格式:

修飾符 返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1, 參數(shù)類型 形式參數(shù)2, ...)
{
    執(zhí)行語句;
    return 返回值;
}

Example

class FunctionDemo
{
    public static void main(String[] args)
    {
        int c = add(3,4);
        System.out.println("c="+c);
    }
    int add(int a, int b)
    {
        return a+b;
    }
}

編譯報(bào)錯(cuò):無法從靜態(tài)上下文中引用非靜態(tài)方法add(int, int),需要在add()函數(shù)前加static修飾符(注意是在編譯過程中失?。?/p>

函數(shù)的特點(diǎn)

  • 定義函數(shù)可以將功能代碼進(jìn)行封裝
  • 便于對(duì)該功能進(jìn)行復(fù)用,函數(shù)的出現(xiàn)提高了代碼的復(fù)用性
  • 函數(shù)只有被調(diào)用才會(huì)被執(zhí)行
  • 對(duì)于函數(shù)沒有具體返回值的情況,返回值類型用關(guān)鍵字void表示,那么該函數(shù)中的return語句如果在最后一行可以省略不寫

注意:

  • 函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù)。
  • 定義函數(shù)時(shí),函數(shù)的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理。
    Example
class Demo 
{
    public static void main(String[] args) 
    {
        System.out.println(add(3,5));
    }
    public static void add(int a, int b)
    {
        System.out.println(a + b);
        return;
    }
}

編譯出錯(cuò): System.out.println(add(3,5));此處不允許使用void類型。

函數(shù)的應(yīng)用

Example:判斷成績所屬的等級(jí)

public static char getLevel1(int num)
{
    char level;
    if(num>=90 && num<=100) level = 'A';
    else if(num>=80 && num<=89) level = 'B';
    else if(num>=70 && num<=79) level = 'C';
    else if(num>=60 && num<=69) level = 'D';
    else if(num<60) level = 'E';
    return level;
}

public static char getLevel2(int num)
{
    char level;
    if(num>=90 && num<=100) level = 'A';
    else if(num>=80 && num<=89) level = 'B';
    else if(num>=70 && num<=79) level = 'C';
    else if(num>=60 && num<=69) level = 'D';
    else if(num<60 || num>100) level = 'E';
    return level;
}

兩個(gè)函數(shù)均編譯錯(cuò)誤 :可能尚未初始化變量level;編譯時(shí)不會(huì)判斷數(shù)值(即使涵蓋了所有的情況),只管語法錯(cuò)誤,所以最后應(yīng)加else語句。

函數(shù)的重載(overload)

重載的概念:在同一類中,允許存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。
重載的特點(diǎn):與返回值類型無關(guān),只看參數(shù)列表。
重載的好處:方便于閱讀,優(yōu)化了程序設(shè)計(jì)(函數(shù)的功能一樣,僅僅是參與運(yùn)算的未知內(nèi)容不同時(shí),可以定義多函數(shù),卻使用統(tǒng)一函數(shù)名稱,這樣方便閱讀,在調(diào)用時(shí),虛擬機(jī)通過參數(shù)列表的不同來區(qū)分同名函數(shù))。

Example1

public static int add(int a, int b)
{
    return a+b;
}
public static double add(int a, int b)
{
    return a+b;
}

編譯報(bào)錯(cuò):已在XX中定義add(int, int)…,Java是嚴(yán)謹(jǐn)性語言,如果函數(shù)出現(xiàn)調(diào)用的不確定性,會(huì)編譯失敗。

Example2:打印乘法表

/**
打印指定參數(shù)的任意乘法表
*/
public static void printCFB(int num)
{
    for(int x=1; x<=num; x++)
    {
        for(int y=1; y<=x; y++)
        {
            System.our.print(y+"*"+x+"="+y*x+"t");
        }
        System.out.println();
    }
}
/**
打印標(biāo)準(zhǔn)乘法表(不指定參數(shù)的情況下)
*/
public static void printCFB()
{
    for(int x=1; x<=9; x++)
    {
        for(int y=1; y<=x; y++)
        {
            System.our.print(y+"*"+x+"="+y*x+"t");
        }
        System.out.println();
    }
}

如上,一般只要一重載,代碼就會(huì)重復(fù);可以通過調(diào)用的方式,減少重復(fù)代碼。


/**
打印指定參數(shù)的任意乘法表
*/
public static void printCFB(int num)
{
    for(int x=1; x<=num; x++)
    {
        for(int y=1; y<=x; y++)
        {
            System.our.print(y+"*"+x+"="+y*x+"t");
        }
        System.out.println();
    }
}
/**
打印標(biāo)準(zhǔn)乘法表。
*/
public static void printCFB()
{
    printCFB(9);
}

一般由于參數(shù)個(gè)數(shù)的原因重載,都能復(fù)用;而如果是參數(shù)類型,則不行。

函數(shù)調(diào)用

棧的形式

數(shù)組

數(shù)組的定義

概念:同一類型數(shù)據(jù)的集合,其實(shí)數(shù)組就是一個(gè)容器。

好處:可以自動(dòng)給數(shù)組中的元素從0開始編號(hào),方便操作這些元素。

格式:

/*=======第一種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[元素個(gè)數(shù)或數(shù)組長度];
/*=========示例========*/
int[] arr = new int[5];

/*=======第二種格式=======*/
元素類型[] 數(shù)組名 = new 元素類型[]{元素1, 元素2, ...};
/*=========示例========*/
int[] arr = new int[]{3,5,1,7};   //用new,常規(guī)初始化方式
int[] arr = {3,5,1,7};            //靜態(tài)初始化方式
//以上兩種方式在大部分情況下都是通用的,但它們?cè)谥匦沦x值或傳參時(shí)會(huì)有一點(diǎn)小差別

Example

int[] arr = new int[3];
System.out.println(arr[0]);
System.out.println(arr[1]);
//均輸出0(默認(rèn)賦值為0)

數(shù)組的內(nèi)存分配及特點(diǎn)

Java內(nèi)存分為五片:

  • 寄存器(CPU使用)
  • 本地方法區(qū)(調(diào)用系統(tǒng)底層內(nèi)容)
  • 方法區(qū)(別名【數(shù)據(jù)區(qū)、共享區(qū)、share data】,存儲(chǔ)方法)
  • 棧內(nèi)存(基本數(shù)據(jù)類型):存儲(chǔ)的都是局部變量,變量所屬的作用域一旦結(jié)束,該變量就會(huì)自動(dòng)釋放。
  • 堆內(nèi)存(引用數(shù)據(jù)類 ):存儲(chǔ)數(shù)組和對(duì)象(其實(shí)數(shù)組也是對(duì)象),凡是new建立的對(duì)象都在堆中。

堆的特點(diǎn):

  • 每一個(gè)實(shí)體都有首地址值。
  • 堆內(nèi)存中的每一個(gè)變量都有默認(rèn)初始化值,根據(jù)類型的不同而不一樣,整數(shù):0,小數(shù):0.0或者0.0f,boolean:false,char :‘u0000’,實(shí)體:null。
  • 垃圾回收機(jī)制:當(dāng)堆中的實(shí)體沒有被任何變量指向時(shí),不像棧一樣,會(huì)立刻被釋放,而是會(huì)被視作垃圾,被自動(dòng)回收,垃圾回收機(jī)制會(huì)不定時(shí)的,自動(dòng)檢測(cè)堆里的垃圾,進(jìn)行回收。C++需要程序員手動(dòng)回收堆里的垃圾,析構(gòu)函數(shù)。

Example1

int[] arr = new int[3];
//arr在棧中,new int[3]在堆中,堆中存的是實(shí)體,實(shí)體的用途:用于封裝數(shù)據(jù),存儲(chǔ)很多數(shù)據(jù)

Example2

sytem.out.print(arr[0]);//先找arr,再根據(jù)地址找數(shù)組,找到數(shù)組后找對(duì)應(yīng)的元素
arr = null;             //讓arr不指向任何實(shí)體對(duì)象 

數(shù)組操作常見問題

Example1:ArrayIndexOutOfBoundsException異常

int[] arr = new int[3];
System.out.println(arr[3]);

編譯完,不會(huì)出錯(cuò),因?yàn)榫幾g時(shí)不會(huì)在內(nèi)存中建立數(shù)組,因此也不會(huì)找角標(biāo)
運(yùn)行時(shí),產(chǎn)生問題,當(dāng)訪問到數(shù)組中不存在的角標(biāo)/索引時(shí),就會(huì)產(chǎn)生ArrayIndexOutOfBoundsException異常。

Example2:NullPointerException異常

int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);

運(yùn)行出錯(cuò),當(dāng)引用型變量沒有任何實(shí)體指向時(shí),還在用其操作實(shí)體,就會(huì)產(chǎn)生NullPointerException異常。

Example3

int[] arr = new int[3];
System.out.println(arr);  //[I@c17164

@右邊:哈希值,哈希本身是一種算法,由這個(gè)算法來定義數(shù)組實(shí)體在內(nèi)存中存儲(chǔ)的位置,可以簡單理解為是一個(gè)地址值,windows支持的,Java調(diào)用。
@左邊:代表實(shí)體的類型, [:數(shù)組型, I:int型。
測(cè)試的時(shí)候用,當(dāng)我們不知道這個(gè)變量接收的數(shù)據(jù)是什么類型時(shí),可以打印出來看看。

數(shù)組常見操作

Example1:獲取最值(最大值,最小值)

class Demo
{
    public static void main(String[] args)
    {
        int[] arr = {-34,-19,-11,-109,-3,-56};
        int max = getMax(arr);
        System.out.println("max="+max);
    }
    public static int getMax(int[] arr)
    {
        int max = arr[0];
        for(int x=1; x<arr.length; x++)
        {
            if(arr[x]>max) max = arr[x];
        }
        return max;
    }
}

注意max初始化的問題,若初始化為0,則判斷不出最大值。

Example2-1:選擇排序,特定位置和其他位置比較

public static void selectSort(int[] arr)
{
    for(int i = 0; i < arr.length-1; i++)
    {
        for(int j = i+1; j < arr.length; j++)
        {
            if(arr[i]>arr[j])
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
//性能問題
//在selectSort中,每次把最小的元素放到固定位置的過程中,會(huì)進(jìn)行大量元素的交換,實(shí)際上只要找到值最小的元素,再與固定位置交換即可
public static void selectSort_2(int[] arr)
{
    for(int x=0; x<arr.length-1; x++)
    {
        int num = arr[x];
        int idex = x;
        for(int y=x+1; y<arr.length; y++)
        {
            if(num>arr[y])
            {
                num = arr[y];
                index = y;
            }
        }
        if(index!=x)
        {
            int temp = arr[x];
            arr[x] = arr[index];
            arr[index] = temp;
        }      
    }
}

Example2-2:冒泡排序,相鄰元素比較

public static void bubbleSort(int[] arr)
{
    for(int x=0; x<arr.length-1; x++)//每次循環(huán)將此次比較的元素中最大的元素移到此次序列的最后
    {
        for(int y=0; y<arr.length-1-x; y++)//-1避免角標(biāo)越界,-x外循環(huán)增加一次,比較的元素個(gè)數(shù)遞減
        {
            if(arr[y]>arr[y+1])
            {
                int temp = arr[y];
                arr[y] = arr[y+1];
                arr[y+1] = temp;
            }
        }
    }
}
//數(shù)組中元素的交換可以提取出來,寫作函數(shù)
public static void swap(int[] arr,int a,int b)
{
    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}
public static void bubbleSort_2(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])
                swap(arr,y,y+1);
        }
    }
}
//其中的for循環(huán)也可以寫成以下形式
for(int x=arr.length-1; x>0; x--)
{
    for(int y=0; y<x; y++)
    {
        ...
    }
}

注意:
1、可以通過調(diào)用Arrays.sort(arr);實(shí)現(xiàn)排序功能
2、操作的是同一空間

Example3:折半查找(二分查找)

public static int func(int[] arr, int value)
{
    int min, max, mid;
    min = 0;
    max = arr.length;
    mid = (min+max)/2;
    while(min <= max)
    {
        mid = (min+max)/2;//mid = (a+b)>>2;
        if(arr[mid] < value)
            min = mid+1;
        else if(arr[mid] > value)
            max = mid-1;
        else
            return mid;
    }
    return -1;
}

注意:

  1. 給定一個(gè)有序數(shù)組,若往該數(shù)組中存儲(chǔ)一個(gè)元素,并保證數(shù)組仍然是有序的,那么這個(gè)元素存儲(chǔ)的角標(biāo)如何獲取-->return min。

  2. int[] arr = {13,15,19,27,33,45,78,106};
    Arrays.binarySearch(arr,45);
    //若元素存在,返回元素所在的位置;
    //若元素不存在,返回的是-插入點(diǎn)-1;之所以-1,是因?yàn)楸苊夥祷?,例如Arrays.binarySearch(arr,5)
    

Example4:進(jìn)制轉(zhuǎn)換:利用與運(yùn)算實(shí)現(xiàn)

public static void main(String[] args)
{
    toHex(60);
}
//0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
//0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
public static void toHex(int num)
{
    for(int x = 0; x < 8; x++)
    {
        int temp = num & 15;
        if(temp > 9)
            System.out.print((char)(temp-10+'A'));
        else
            System.out.print(temp);
        num = num >>> 4;
    }
}
/*
什么時(shí)候使用數(shù)組呢?
如果數(shù)據(jù)出現(xiàn)了對(duì)應(yīng)關(guān)系,而且對(duì)應(yīng)關(guān)系的一方是有序的數(shù)字編號(hào),可作為角標(biāo)使用。

將這些數(shù)據(jù)存儲(chǔ)到數(shù)組中,根據(jù)運(yùn)算的結(jié)果作為角標(biāo)直接去查數(shù)組中對(duì)應(yīng)的元素即可。
這種方式:稱為查表法。
(存在對(duì)應(yīng)關(guān)系,但無序,可以使用map)
*/
public static void toHex_2(int num)
{
    if(num == 0)
    {
        System.out.print("0");
        return;
    }
    char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] arr = new char[8];
    int pos = arr.length;
    while(num != 0)
    {
        int temp = num & 15;
        arr[--pos] = chs[temp];
        num = num >>> 4;
    }
    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x]);
    }
}
/*十進(jìn)制轉(zhuǎn)二進(jìn)制/八進(jìn)制類似
可以通過函數(shù)調(diào)用的方式,將通用的代碼抽出來
*/
//十進(jìn)制-->十六進(jìn)制
public static void toHex(int num)
{
    trans(num,15,4);
}
//十進(jìn)制-->二進(jìn)制
public static void toBinary(int num)
{
    trans(num,1,1);
}
//十進(jìn)制-->八進(jìn)制
public static void toOctal(int num)
{
    trans(num,7,3);
}
public static void trans(int num, int base, int offset)
{
    if(num == 0)
    {
        System.out.print("0");
        return;
    }
    char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] arr = new char[32];
    int pos = arr.length;
    while(num != 0)
    {
        int temp = num & base;
        arr[--pos] = chs[temp];
        num = num >>> offset;
    }
    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x]);
    }
}

注意:可以通過Integer類的方法直接將十進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)的進(jìn)制數(shù)

System.out.println(Integer.toBinaryString(-6));
System.out.println(Integer.toHexString(5));
System.out.println(Integer.toOctalString(32));

二維數(shù)組

格式:

格式1:int[][] arr = new int[3][2];

  • 定義了名稱為arr的二維數(shù)組
  • 二維數(shù)組中有3個(gè)一維數(shù)組
  • 每一個(gè)一維數(shù)組中有2個(gè)元素
  • 一維數(shù)組的名稱為arr[0],arr[1],arr[2]
  • 給第一個(gè)一維數(shù)組1角標(biāo)位賦值為78寫法:arr[0][1] = 78;

格式2:int[][] arr = new int[3][];

  • 二維數(shù)組中有3個(gè)一維數(shù)組

  • 每個(gè)一維數(shù)組都是默認(rèn)初始化值null

  • 可以對(duì)這三個(gè)一維數(shù)組分別進(jìn)行初始化

    arr[0] = new int[3];
    arr[1] = new int[1];
    arr[2] = new int[2];
    

格式3:

int[][] arr = {{3,1,7},{5,8,2,9},{4,6}};

還可以寫成如下方式:

int[][] arr = new int[3][2];
int[] arr[] = new int[3][2];
int arr[][] = new int[3][2];

內(nèi)存圖示:

Example1:直接打印二維數(shù)組

int[][] arr1 = new int[3][2];
System.out.println(arr);       //[[I@c17164
System.out.println(arr[0]);    //[I@1fb8ee3
System.out.println(arr[0][0]); //0

int[][] arr2 = new int[3][];
System.out.println(arr);       //[[I@c17164
System.out.println(arr[0]);    //null
System.out.println(arr[0][0]); //NullPointerException

Example2:數(shù)組長度

System.out.println(arr.length);    //打印二維數(shù)組的長度-->就是一維數(shù)組的個(gè)數(shù)。
System.out.println(arr[1].length); //打印二維數(shù)組中角標(biāo)為1的一維數(shù)組的長度。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 2,075評(píng)論 0 2
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù),而在處理數(shù)...
    Java幫幫閱讀 1,681評(píng)論 0 9
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周書達(dá)閱讀 833評(píng)論 0 0
  • Win7下如何打開DOS控制臺(tái)? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,708評(píng)論 4 12
  • 今天樊登讀書企業(yè)版——一書一課做活動(dòng)買一年送一年,作為小小書童的我一直忙個(gè)不停,說句實(shí)在話,真的不下于雙十一,雙十...
    諸葛學(xué)堂大語文閱讀 170評(píng)論 0 0

友情鏈接更多精彩內(nèi)容