基于JDK11的流程控制和数组

流程控制和数组

swicth后面控制的类型只能是byte、short、char、int四种整数类型,枚举和java.lang.String类型(从java7才支持),不能是boolean类型

switch(expression){
    
    
	case condition1:{
    
    
		statment(s);
		break;
	}
}

Java11编译器做了一些改进,当case块后面没有break语句,会出现警告:“[fallthrough]可能无法实现case”,这个警告以前需要为Java指定-X:fallthrough选项才能显示出来。

Java7允许switch后市java.lang.String,但不能是StringBuffer和Stringbuilder这两个字符串类型。

while(count < 10);
//下面的代码和while循环没有关系,因为while后面加了";"
{
    
    
System.out.println("hello word");
}
package com.uncle;

public class Test {
    
    

    public static void main(String[] args) {
    
    

        //当中间的条件为空时,则默认值为true
        for (int i = 0; ; i++) 
        {
    
    
            //将无限输出hello word
            System.out.println("hello word");
        }
    }
}

Java提供了continue和break来控制循环结构,除此之外,return可以结束整个方法。

continue和break区别:

  • continue只是忽略本次循环剩下的语句,并不会终止循环
  • break则完全终止循环本身

return并不是用来结束循环的,它是来结束一个方法的。

数组是引用类型

数组一旦初始化完成,它所占用的内存空间就被固定下来,即数组的长度将不可改变

数组必须先初始化,然后才可以使用,所谓初始化,就是为数组的数组元素分配在内存空间,并为数组元素赋初始值

初始值的获得有两种形式:一种是由系统自动分配,另一种是由程序员指定。

数组的初始化有两种方式:

  • 静态初始化:自己指定数组元素的初始值,系统决定数组长度
  • 动态初始化:自己给定数组长度,系统分配初始值

如果访问数组元素的索引值小于0或者大于数组的长度,在编译期间不会发生错误,但是在运行时会出现异常:java.lang.ArrayIndexOutOfBoundsException:N(数组索引越界异常),N代表访问的数组索引

Java5提供了foreach循环

package com.uncle;

public class Test {
    
    

    public static void main(String[] args) {
    
    

        String[] str = new String[]{
    
    "", ""};
        for (String string : str) {
    
    

            System.out.println(string.hashCode());
        }
    }
}

如果从数组底层的运行机制上来看,没有多维数组

Arrays方法

Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。

import java.util.Arrays;

Arrays.fill(); //填充数组

int[] arr = new int[5];//新建一个大小为5的数组
Arrays.fill(arr,4);//给所有值赋值4
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[4, 4, 4, 4, 4]
int[] arr = new int[5];//新建一个大小为5的数组
Arrays.fill(arr, 2,4,6);//给第2位(0开始)到第4位(不包括)赋值6
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[0, 0, 6, 6, 0]

Arrays.sort(); //数组排序

Arrays类有一个静态方法sort,利用这个方法可传入要排序的数组进去排序,因为传入的是一个数组的引用,所以排序完成的结果也通过这个引用来更改数组。

1.数字排序

int[] intArray = new int[] {
    
     4, 1, 3, -23 };
Arrays.sort(intArray);
//输出: [-23, 1, 3, 4]

2.字符串排序,先大写后小写

String[] strArray = new String[] {
    
     “z”, “a”,C};
Arrays.sort(strArray);
//输出: [C, a, z]

3.严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort

 Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
    //输出: [a, C, z]

4.反向排序, Reverse-order sort

 Arrays.sort(strArray, Collections.reverseOrder());
    //输出:[z, a, C]

5.忽略大小写反向排序 Case-insensitive reverse-order sort

 Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
    Collections.reverse(Arrays.asList(strArray));
    //输出: [z, C, a]

6.选择数组指定位置进行排序

int[] arr = {
    
    3,2,1,5,4};
Arrays.sort(arr,0,3);//给第0位(0开始)到第3位(不包括)排序
String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[1, 2, 3, 5, 4]

Arrays.toString(); //将数组中的内容全部打印出来

int[] arr = {
    
    3,2,1,5,4};
System.out.print(arr);//直接将数组打印输出
//输出:[I@7852e922 (数组的地址)

String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
//System.out.print(str);
//输出:[3, 2, 1, 5, 4]

Arrays.equals(); //比较数组元素是否相等

int[] arr1 = {
    
    1,2,3};
int[] arr2 = {
    
    1,2,3};
System.out.println(Arrays.equals(arr1,arr2));
//输出:true
//如果是arr1.equals(arr2),则返回false,因为equals比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。

Arrays.binarySearch(); //二分查找法找指定元素的索引值(下标)

数组一定是排好序的,否则会出错。找到元素,只会返回最后一个位置

int[] arr = {
    
    10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 30));
//输出:2 (下标索引值从0开始)

int[] arr = {
    
    10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 36));
//输出:-4 (找不到元素,返回-x,从-1开始数,如题,返回-4)

int []arr = {
    
    10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,30));
//输出:2 (从0到3位(不包括)找30,找到了,在第2位,返回2)

int []arr = {
    
    10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,40));
//输出:-4 (从0到3位(不包括)找40,找不到,从-1开始数,返回-4)

Arrays.copeOf()Arrays.copeOfRange(); //截取数组

int[] arr = {
    
    10,20,30,40,50};
int[] arr1 = Arrays.copyOf(arr, 3);
String str = Arrays.toString(arr1); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[10, 20, 30] (截取arr数组的3个元素赋值给新数组arr1)
int []arr = {
    
    10,20,30,40,50};
int []arr1 = Arrays.copyOfRange(arr,1,3);
String str = Arrays.toString(arr1); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.print(str);
//输出:[20, 30] (从第1位(0开始)截取到第3位(不包括))

Guess you like

Origin blog.csdn.net/m0_51945027/article/details/121856740