Java 学习笔记 Day006

今天上午读到一句话:不怕别人比你优秀,就怕优秀的人比你更努力。 一瞬间,我懵了。回想这些年我一直没有进步,其实是我从没有努力去追赶,去追赶那些优秀的人。其实哪怕一点点,也是一种进步,也是对成长的回馈。我不是一个愤青,但我想对自己的人生负责,去完成自己想做的事。
今天是Java学习的第六天(周末休息),从零开始学习一门编程语言已经过了一个星期啦。今天主要学了数组, 顺便看了一下 redis 和 nginx 配置(后期会整理redis 和nginx的知识点出来)。

数组

数组的概念:管理若干个相同类型的元素,数组对于每一门编程语言来说都是重要的数据结构之一
声明数组语法:

dataType[] arrayRefVar;   // 首选的方法  数组的类型[] 数组的名字
或
dataType arrayRefVar[];  // 效果相同,但不是首选方法   数组的类型[] 数组的名字

创建数组:Java语言使用new操作符来创建数组,语法如下:arrayRefVar = new dataType[arraySize];
数组变量的声明,和创建数组可以用一条语句完成,如下所示:dataType[] arrayRefVar = new dataType[arraySize];
另外,还可以使用如下的方式创建数组:dataType[] arrayRefVar = {value0, value1, ..., valuek};
(引用类型变量,该变量中存储的是数据存在内存中的起始地址,不是存储的数据本身。如数组的名字)

数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。

数组元素的赋值和读取都需指明下角标[元素在数组中的位置],就是数组的索引。
数组元素的赋值:arrayRefVar[ n ] = number ;
数组元素的读取: int number = arrayRefVar[ n ] ;

//file name:ArrayTest01.java
import java.util.Arrays;
public class ArrayTest01 {
    public static void main(String[] args) {
        int[] array01 = new int[10];//声明一个数组
        array01[0] = 200;  //对一个元素赋值
        for (int i = 1; i < array01.length; i++) {
            array01[i] = i;   //对数组元素赋值,如果没有赋值则数组元素的值为相应类型的默认值
        }
        System.out.println(Arrays.toString(array01)); //把数组转为字符串输出
    }
}
//程序执行结果为 :[200, 1, 2, 3, 4, 5, 6, 0, 0, 0]

数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者 foreach 循环。

//输入学生成绩 直到负数为止,并求出平均值。
//file name :ArrayTest07.java
import java.util.Arrays;
import java.util.Scanner;

public class ArrayTest07 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int[] stuScores = new int[0];

        int count = 0 ;
        while(true){
            System.out.print("请输入学生的分数:");
            int num = s.nextInt();
            if(num >= 0){
                //新数组代替旧数组
                int[] tempScores  = new int[stuScores.length + 1];
                for (int j = 0; j < stuScores.length; j++) {
                    tempScores[j] = stuScores[j];
                }
                tempScores[tempScores.length - 1] = num;
                stuScores = tempScores;
                count ++;
            }else {
                break;
            }
        }
        System.out.println("\n输入了" + count + "个学生的成绩");
        int sum = 0;
        if (count != 0){
            System.out.println(Arrays.toString(stuScores));
            for (int i = 0; i < stuScores.length; i++) {
                sum += stuScores[i];
            }
            double avg = 1.0*sum/stuScores.length;
            System.out.println("avg = " + avg);
        }else {
            System.out.println("没有录入成绩");
        }
    }
}
/*输入10个学生的成绩,冒泡法 :从小到大 和 从大到小 排序
file name :ArrayTest13.java*/
import java.util.Arrays;
import java.util.Scanner;

public class ArrayTest13 {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        //录入成绩
        int[] allScore = new int[10];
        for (int i = 0; i < allScore.length; i++) {
            System.out.println("请输入学生成绩:");
            allScore[i] = s.nextInt();
        }
        System.out.println("录入成绩为:" + Arrays.toString(allScore));

        //冒泡法从小到大排序
        for (int i = 0; i < allScore.length - 1; i++) {
            for (int j = i + 1; j < allScore.length; j++) {
                if(allScore[i] > allScore[j]){
                    int temp = allScore[i];
                    allScore[i] = allScore[j];
                    allScore[j] = temp;
                }
            }
        }
        System.out.println("从小到大排序后:" + Arrays.toString(allScore));

        //倒序
        int[] tempScore = new int[allScore.length];
        for (int i = 0; i < allScore.length; i++) {
            tempScore[tempScore.length - 1 - i] = allScore[i];
        }
        allScore = tempScore;
        System.out.println("从大到小排序后:" + Arrays.toString(allScore));

    }

}

多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:

String str[][] = new String[3][4];

多维数组的动态初始化(以二维数组为例)
直接为每一维分配空间,格式如下:

type arrayName = new typ[arraylenght1][arraylenght2];

type 可以为基本数据类型和复合数据类型,arraylenght1 和 arraylenght2 必须为正整数,arraylenght1 为行数,arraylenght2 为列数。
例如:

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

解析:
二维数组 a 可以看成一个两行三列的数组。

数组的拓展和收缩(数组的增加和减少)
好笨的方法:数组的长度是固定, 只能生成新的数组代替 旧的数组。

注意避免空指针异常。数组的索引一定要大于等于0,可以避免空指针异常。假如 int[] a = null;当 a[0] = 2;时就发生空指针异常。array01.length 为分母时,如果array01.length == 0 ,不会出现异常,但是结果为NaN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值