Java基础复习

Java基础复习,第1张

周末小结 遍历数组

通过嵌套型for循环实现遍历二维数组

public class Demo{
    public static void main(String[] args){
        char arr[][]=new char[4][];
        arr[0]=new char[]{'春','眠','不','觉','晓'};
        arr[1]=new char[]{'处','处','闻','啼','鸟'};
        arr[2]=new char[]{'夜','来','风','雨','声'};
        arr[3]=new char[]{'花','落','知','多','少'};
        
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }
    }
}

也可以同样使用foreach循环实现同样功能

public class Demo{
    public static void main(String[] args){
        char arr[][]=new char[4][];
        arr[0]=new char[]{'春','眠','不','觉','晓'};
        arr[1]=new char[]{'处','处','闻','啼','鸟'};
        arr[2]=new char[]{'夜','来','风','雨','声'};
        arr[3]=new char[]{'花','落','知','多','少'};
        
        for(char a[]:arr){
            for(char b:a){
                System.out.print(b);
            }
            System.out.println();
        }
    }
}

结果如下:

春眠不觉晓
处处闻啼鸟
夜来风雨声
花落知多少
填充和批量替换数组元素 1.填充
//一般通过两种方法再完成填充和批量替换数组
Aarrays.fill(arr,int value)
//其中arr表示数组,value表示要填充的值
Arrays.fill(arr,int fromIndex,int tolndex,int value)
//其中fromIndex表示填充的第一个索引(包括)
//tolndex表示填充的最后一个索引(不包括)

例子如下:

public class Demo{
    public static void main(String[] args){
        int arr[]=new int[5];
        Arrays.fill(arr,13);
        //实现填充效果
        for(int i=0;i

填充的方法之前不能有其他的赋值 *** 作,否则会被覆盖,例如下例所示

public class Demo{
    public static void main(String[] args){
        int arr[]=new int[5];
       arr[0]=7;  //填充前对数组进行赋值 *** 作
        Arrays.fill(arr,13);//进行填充,结果跟上例相同
      for(int i=0;i

结果同一如下:

第0个元素的值是13
第1个元素的值是13
第2个元素的值是13
第3个元素的值是13
第4个元素的值是13
2.批量替换
public class Demo{
    public static void main(String[] args){
        int arr[]={1,2,3,4,5,6,7,8};
        Arrays.fill(arr,2,5,0);//从索引2位置开始替换到索引5之前
        //注意不要超出索引范围,否则会出现数组下表越界
        for(int i=0;i

结果如下:

0个元素的值是11个元素的值是22个元素的值是03个元素的值是04个元素的值是05个元素的值是66个元素的值是77个元素的值是8

举一反三:

将手机号码15612543731中的“1254”替换为"*"

public class Demo{
    public static void main(String[] args){
   int arr[]={1,5,6,1,2,5,4,3,7,3,1};
        Arrays.fill(arr,3,7,0);//从索引2位置开始替换到索引5之前
        //注意不要超出索引范围,否则会出现数组下表越界
        for(int i=0;i
对数组进行排序

使用Arrays.sort(arr)方法,例如:

int arr[]=new int[]{23,42,12,8};
Arrays.sort(arr);

例如对数组a[]排序,代码如下:

public class Demo{
    public static void main(String[] args){
        int a[]=new int[]{56,14,92,1};
        Arrays.sort(a);
        for(int tmp:a){
            System.out.print(tmp+" ");
        }
    }
}

运行结果为:

1 14 56 92 

利用Java自身提供的API较为简单,相对于选择排序和冒泡排序更为方便。

举一反三:
利用Arrays.sort(arr)方法对带有小数的数组排序

public class Demo{
    public static void main(String[] args){
        double b[]=new double[]{12.0,85.4,1.1,2.3};
        Arrays.sort(b);
        for(double tmp:b){
            System.out.print(tmp+" ");
        }
    }
}

运行结果为:

1.1 2.3 12.0 85.4 

总结:Arrays.sort(arr)方法虽然好用,但也有它的弊端,那就是默认的排序结果都是升序的,不像冒泡排序和选择排序一样可以主观的调整排序结果

复制数组

在学习复制数组语法前,先观察这样一个现象

public class Demo{
    public static void main(String[] args){
        int a[]={1,2,3};
        int b[]=a;
        System.out.print("a数组");
        for(int temp:a){
            System.out.print(temp+" ");
        }
        System.out.println();
        System.out.print("b数组");
        for(int temp:b){
            System.out.print(temp+" ");
        }
    }
}

此时,编译器得到的结果是这样的

a数组 1 2 3 
b数组 1 2 3 

看起来就像是把a数组的值复制给了b,现在我们将b数组第一个值改为77,那么最后的结果是多少呢?

代码如下:

public class Demo{
    public static void main(String[] args){
        int a[]={1,2,3};
        int b[]=a;
        b[0]=77;
        System.out.print("a数组");
        for(int temp:a){
            System.out.print(temp+" ");
        }
        System.out.println();
        System.out.print("b数组");
        for(int temp:b){
            System.out.print(temp+" ");
        }
    }
}

运行结果:

a数组 77 2 3 
b数组 77 2 3 

b数组的第一个值变为77了,但是我们发现a数组的第一个变成了77,因为我们创建这个数组时,a是数组变量,后面的值是一个常量,我们将一个变量赋给另一个变量时,它们指向的是同一个常量,也就是说当b中第一个元素改为77时,a用的也是这个常量,随之a的值也会发生改变,从计算角度来说,a跟b指向的是同一块儿的内存区域,所以等号的赋值方法不是解决数组复制的方法。

可以通过copyOf方法解决复制问题

Arrays.copyOf(arr.newlength);
//arr:数组
//newlength:复制后的新的数组长度
public class Demo{
    public static void main(String[] args){
        int a[]={1,2,3};
        int b[]=Arrays.copyOf(a,3);
        //通过copyOf方法复制
        b[0]=77;
        System.out.print("a数组");
        for(int temp:a){
            System.out.print(temp+" ");
        }
        System.out.println();
        System.out.print("b数组");
        for(int temp:b){
            System.out.print(temp+" ");
        }
    }
}

运行结果:

a数组 1 2 3 
b数组 77 2 3 

b数组的数值更改后并未影响到a数组,copyOf方法为b开辟了一块儿新的内存空间,b和a数组是两个完全独立的常量,所以互不干扰。

注意:如果拷贝的元素个数大于原来数组已有元素个数,会自动补充两个元素,也就是int元素的默认值0;

Arrays.copyOfRange(arr,formlndex,tolndex);
//该方法可指定复制索引区域
formlndex:指定开始复制数组的索引位置(包括)
tolndex:要复制范围的最后索引位置(不包括)

代码实例:

public class Demo{
    public static void main(String[] args){
        int a[]={1,2,3,4,5,6};
        int b[]=Arrays.copyOfRange(a,2,5);
        //通过copyOf方法复制
        System.out.print("a数组");
        for(int temp:a){
            System.out.print(temp+" ");
        }
        System.out.println();
        System.out.print("b数组");
        for(int temp:b){
            System.out.print(temp+" ");
        }
    }
}

运算结果:

a数组 1 2 3 4 5 6 
b数组 3 4 5 

好了,今天就到这里了,拜拜bye~

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/719833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)