0
点赞
收藏
分享

微信扫一扫

温故01(java基础复习)

大漠雪关山月 2022-04-15 阅读 48
java

 

目录

运算符 (代码)

SetValueTest

CompareTest

LogicTest

BitTest

SanYuanTest

流程控制 (代码)

Scanner使用

ScannerTest

选择结构语句

IfTest

IfWork

IfWork2

IfWork3

IfWork4

SwitchTest

SwitchTest2

循环结构语句

ForTest

ForTest1

ForTest2

ForWhileTest

ForForTest

WhileTest

DoWhileTest

跳出语句

BreakContinueTest

数组 (代码)

数组概念

ArrayTest

数组练习

ArrayDemo1

YangHuiTest

二维数组

ArrayTest2

ArrayTest3

数组的复制,反转,查找

ArrayExer2

冒泡排序

BubbleSortTest

数组常见异常

ArrayExceptionTest


运算符 (代码)

SetValueTest

/*运算符之二:赋值运算符
=  +=  -=  *=  /=  %=

 */
public class SetValueTest {

    public static void main(String[] args) {
        //赋值符号:=
        int i1 = 10;
        int j1 = 10;

        int i2, j2;
        //连续赋值
        i2 = j2 = 10;

        int i3 = 10, j3 = 20;

        //****************
        int num1 = 10;
        num1 += 2;//num1 = num1 + 2;
        System.out.println(num1);//12

        int num2 = 12;
        num2 %= 5;//num2 = num2 % 5;
        System.out.println(num2);

        short s1 = 10;
        //s1 = s1 + 2;//编译失败
        s1 += 2;//不会改变变量本身的数据类型
        System.out.println(s1);

        //开发中实现+2的操作,有几种方法?(前提 int num = 10)
        //方式一: num = num + 2;
        //方式二: num +=2;(推荐)

        //开发中 如果希望实现+1的操作 有几种方法?
        //方法一 num = num +1;
        //方法二 num +=1;
        //方法三 num++;(推荐)


    }


}

CompareTest

public class CompareTest {
    public static void main(String[] args) {
        int i = 10;
        int j = 20;

        System.out.println(i == j);//false
        System.out.println(i = j);//20

        boolean b1 = true;
        boolean b2 = false;

        System.out.println(b2 == b1);//false
        System.out.println((b2 = b1));//true
        
    }
    
}

LogicTest

/*
&  && |  ||  ! ……

 */
public class LogicTest {

    public static void main(String[] args) {

        //区分 & 与 &&
        //相同点1:&与&&的运算结果相同
        //相同点2:当符号左边是true时,二着都会执行符号右边的运算
        //不同点:当符号左边是false时,& 继续执行符号右边的运算。&&不再执行符号右边的运算
        //开发中,推荐使用&&
        boolean b1 = true;
        b1 = false;
        int num1 = 10;
        if (b1 & (num1++ > 0)) {
            System.out.println("我现在在北京");
        } else {
            System.out.println("我现在在南京");
        }
        System.out.println("num1=" + num1);


        boolean b2 = true;
        b2 = false;
        int num2 = 10;
        if (b2 && (num2++ > 0)) {
            System.out.println("我现在在北京");
        } else {
            System.out.println("我现在在南京");
        }
        System.out.println("num2=" + num2);


        //区分| 与 ||
        //相同点1:| 与|| 的运算结果相同
        //相同点2:当符号左边是false时,二者都会执行符号右边的运算
        //不同点3;当符号左边是true时,|继续执行符号右边的运算,||不再执行符号右边的运算
        //开发中,推荐使用||

        boolean b3 = false;
        b3 = true;
        int num3 = 10;
        if(b3 | (num3++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num3 = "+num3);


        boolean b4 = false;
        b4 = true;
        int num4 = 10;
        if(b4 | (num4++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num4 = "+num4);

    }

}

BitTest

/*运算符之五:位运算符(了解)

结论 1,位运算符操作范围的都是整型的数据
     2,<< 在一定范围内,每向左移1位,相当于 * 2
        >> 在一定范围内,每向右移1位,相当于 / 2

 */

public class BitTest {
    public static void main(String[] args) {
        int i = 21;

        System.out.println("i << 2 :" + (i << 2));
        System.out.println("i << 3 :" + (i << 3));
        System.out.println("i << 27 :" + (i << 3));

        int m = 12;
        int n = 5;
        System.out.println("m & n :" + (m & n));
        System.out.println("m | n :" + (m | n));
        System.out.println("m ^ n :" + (m ^ n));

        //联系:交换两个变量的值
        int num1 = 10;
        int num2 = 20;
        System.out.println("num1 = " + num1 + ",num2" + num2);

        //方式一:定义临时变量的方式(水和雪碧用一个空杯子作为介质)
        //int temp = num1;
        //num1 = num2;
        //num2 = temp;

        //方式二:甲乙在河中 甲跳到乙脖子上 乙跳到甲的位置 甲再跳到乙位置上
        //好处,不用定义临时变量
        //弊端:相加可能超出存储范围 局限性:只适用与数值类型
        //num1 = num1 + num2;
        //num2 = num1 -num2;
        //num1 = num1 - num2;

        //System.out.println("num1 = "+ num1 +",num2 = " + num2);

        //方法三,使用位运算符
        num1 = num1 ^ num2;
        num2 = num1 ^ num2;
        num1 = num1 ^ num2;

        System.out.println("num1 = " + num1 + ",num2 = " + num2);


    }
}

SanYuanTest

/*
1 结构:(条件表达式)?表达式1 :表达式2
2 说明
        ①条件表达式的结果为boolean类型
        ②根据条件表达式真或假,决定来执行表达式1还是表达式2
                如果表达式为true,则执行表达式1
                如果表达式为false,则执行表达式2
        表达式1和表达式2要求是一致的 int string
        三元运算符可以嵌套使用 无限套娃哈哈哈

3 凡是可以使用三元运算符的地方,都可以改写成if-else
  反之,不成立。
4 如果程序可以使用三元运算符,又可以使用if-else结构,那么优先使用三元运算符。因为 简洁,执行效率高


 */
public class SanYuanTest {

    public static void main(String[] arga) {

        //获取两个整数的较大值
        int m = 12;
        int n = 5;

        int max = (m > n) ? m : n;
        System.out.println(max);

        //(m > n)? 2 : "n大";//编译错误

        //*************************
        n = 12;
        String maxstr = (m > n) ? "m大" : ((m == n) ? "m与n相等" : "n大");
        System.out.println(maxstr);

        //*************************
        //获取三个数的最大值
        int n1 = 12;
        int n2 = 30;
        int n3 = -43;

        int max1 = (n1 > n2) ? n1 : n2;
        int max2 = (max1 > n3) ? max1 : n3;
        System.out.println("三个数中的最大值为:" + max2);

        //不建议
        int max3 = (((n1 > n2) ? n1 : n2) > n3) ? ((n1 > n2) ? n1 : n2) : n3;
        System.out.println("三个数中的最大值为:" + max3);
        //改写成if-else

    }

}

流程控制 (代码)

Scanner使用

ScannerTest

选择结构语句

IfTest

/*
结构一
if(条件表达式){
    执行表达式
}

结构二 二选一
if(条件表达式){
    执行表达式1
}else{
    执行表达式2
}

结构三 n选一
if(条件表达式){
    执行表达式1
}else if(条件表达式){
    执行表达式2
}else if(条件表达式){
    执行表达式3
}

.....

else{
    执行表达式n
}

 */
public class IfTest {
        public static void main(String[]arga){

        //举例一
        int heartBeats = 79;
        if (heartBeats < 60 || heartBeats > 100) {
            System.out.println("需要做进一步检查");
        }

        System.out.println("检查结束");


        //举例2
        int age = 23;
        if (age < 18){
            System.out.println("你还可以看动画片");
        }else{
            System.out.println("你可以看成人电影了");
        }


        //举例3
        if (age < 0){
            System.out.println("你输入的数据非法");
        }else if (age < 18){
            System.out.println("青少年时期");
        }else if (age < 35){
            System.out.println("青壮年时期");
        }else if (age < 60){
            System.out.println("中年时期");
        }else if (age < 120){
            System.out.println("你是要成仙啊");
        }


        //练习 获取三个数中较大值的实现


        int num1 = 10,num2 = 21,num3 = -21;
        int max;
        if (num1 >= num2 && num1 >= num3){
            max = num1;
        }else if (num2 >= num1 && num2 >= num3){
            max = num2;
        }else{
            max = num3;
        }
        System.out.println("三个数中的最大值为:" + max);

        }

}

IfWork

/*
岳小鹏参加Java考试,他和父亲岳不群达成承诺
如果
成绩为100,奖励一台BMW
成绩为(80,99】,奖励一台 iphone xs max;
成绩为【60,80】,奖励一个ipad;
其它时,什么奖励都没有
请从键盘输入岳小鹏的成绩,并加以判断

说明
1.如果多个条件表达式是互斥关系(或没有交集的关系),上面下面无所谓
                 是交集关系 需要根据实际情况来考虑
                 是包含关系 需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了

 */

public class IfWork {
    public static void main(String[]args){
        Scanner scan = new Scanner(System.in);

        System.out.println("请输入岳小鹏的期末成绩; (0-100)");
        int score = scan.nextInt();

        if (score == 100){
            System.out.println("奖励一台BMW");
        }else if (score > 80 && score <= 99 ){
            System.out.println("奖励一台iphone xs max");
        }else if (score >= 60 && score <= 80){
            System.out.println("奖励一台ipad");
        }else{
            System.out.println("什么奖励都没有");
        }



    }

}

IfWork2

/*
编写程序:由键盘输入三个整数分别存入变量num1 num2 num3
对他们进行排序(使用if-else if-else)并从小到大输出

 */

public class IfWork2 {
    public static void main(String[] args) {
        int num1 = 10, num2 = 20, num3 = 30;
        if (num1 >= num2) {
            if (num3 >= num1) {
                System.out.println(num2 + "," + num1 + "," + num3);
            } else if (num3 <= num2) {
                System.out.println(num3 + "," + num2 + "," + num1);
            } else {
                System.out.println(num2 + "," + num3 + "," + num1);
            }

        } else {
            if (num3 >= num2) {
                System.out.println(num1 + "," + num2 + "," + num3);
            } else if (num3 <= num1) {
                System.out.println(num3 + "," + num1 + "," + num2);
            } else {
                System.out.println(num1 + "," + num3 + "," + num2);
            }


        }


    }


}

IfWork3

//测算狗的年龄

public class IfWork3 {
    public static void main(String[] args) {

        int dogAge = 6;
        if (dogAge >= 0 && dogAge <= 2) {
            System.out.println("相当于人的年龄:" + dogAge * 10.5);
        } else if (dogAge > 2) {
            System.out.println("相当于人的年龄:" + "(2 * 10.5 + (dogAge - 2) * 4)");
        } else {
            System.out.println("狗狗还没出生了!");

        }

        //如何获取一个随机数:10 - 99
        int value = (int) (Math.random() * 90 + 10);//[0.0,1.0)到[0.0,90.0)到[10.0,100.0)到[10,99]
        System.out.println(value);
        //公式:[a,b] : (int)(Math.random() * (b - a + 1) + a)


    }

}


IfWork4

public class IfWork4 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.println("请输入你的身高: (cm) ");
        int height = scan.nextInt();
        System.out.println("请输入你的财富: (千万) ");
        double wealth = scan.nextDouble();
        System.out.println("请输入你是否帅: (true/false)");
        boolean isHandsome = scan.hasNext();


        if (height >= 180 && wealth >= 1 && isHandsome) {
            System.out.println("我一定要嫁给他!!!");
        } else if (height >= 180 || wealth >= 1 || isHandsome) {
            System.out.println("嫁吧,比上不足,比下有余。");
        } else {
            System.out.println("不嫁!");
        }


    }


}

SwitchTest

/*
说明:①根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入到相应case结构中,调用其执行语句。
     当调用完执行语句以后,则依然继续向下执行其他case结构中的执行语句,直到遇到break关键字
     或此switch-case结构末尾结束为止。

     ②break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构

     ③switch结构中的表达式,只能是如下的6种数据类型之一:byte short char int 枚举类型(JDK5.0新增) String类(7.0新增)

     ④case 之后只能声明常量。不能声明范围

     ⑤break关键字是可选的

     ⑥default:相当于if else结构中的else
      default结构是可选的,而且位置是灵活的

     */

public class SwitchCaseTest {
    public static void main(String[] args) {

        int number = 1;
        switch (number) {

            case 0:
                System.out.println("zero");
                break;
            case 1:
                System.out.println("one");
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
            default:
                System.out.println("other");

                //如果switch-case结构中的多个case的执行语句相同,则可以考虑合并


                int score = 78;
                switch (score / 10) {
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                        System.out.println("不及格");
                        break;
                    case 6:
                    case 7:
                    case 8:
                    case 9:
                    case 10:
                        System.out.println("及格");
                        break;

                }
        }
    }

}

SwitchTest2

/*

编写程序:从键盘上输入2019年的 month 和 day 要求通过程序输入的日期为2019年的第几天

说明:
1.凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立
2.我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多)
  又可以使用if-else时,我们优先switch-case。因为switch-case执行效率比较高

 */

public class SwitchCaseTest2 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        System.out.println("请输入2019年的month:");
        int month = scan.nextInt();
        System.out.println("请输入2019年的day");
        int day = scan.nextInt();

        int sumDays = 0;
        //妙啊
        switch (month) {
            case 12:
                sumDays += 30;
            case 11:
                sumDays += 31;
            case 10:
                sumDays += 30;
            case 9:
                sumDays += 31;
            case 8:
                sumDays += 31;
            case 7:
                sumDays += 30;
            case 6:
                sumDays += 31;
            case 5:
                sumDays += 30;
            case 4:
                sumDays += 31;
            case 3:
                sumDays += 28;
            case 2:
                sumDays += 31;
            case 1:
                sumDays += day;


        }

        System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");
    }
}

/*判断一年是否是闰年的标准
1 可以被4整除,但不可被100整除
2 可以被400整除
 */


class SwitchCaseTest3 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        System.out.println("请输入year:");
        int year = scan.nextInt();
        System.out.println("请输入month:");
        int month = scan.nextInt();
        System.out.println("请输入day");
        int day = scan.nextInt();

        int sumDays = 0;

        switch (month) {
            case 12:
                sumDays += 30;
            case 11:
                sumDays += 31;
            case 10:
                sumDays += 30;
            case 9:
                sumDays += 31;
            case 8:
                sumDays += 31;
            case 7:
                sumDays += 30;
            case 6:
                sumDays += 31;
            case 5:
                sumDays += 30;
            case 4:
                sumDays += 31;
            case 3:
                //sumDays += 28;
                //判断是否是闰年
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                    sumDays += 29;
                } else {
                    sumDays += 28;
                }


            case 2:
                sumDays += 31;
            case 1:
                sumDays += day;

        }

        System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");

    }

}

循环结构语句

ForTest

/*
For循环结构的使用
一,循环结构的四个要素
1,初始化条件
2,循环条件---是boolean类型
3,循环体
4,迭代条件

二,for循环的结构
for(1;2;4){
    3
}

 */
public class ForTest {
    public static void main(String[] args) {

        for (int i = 1; i <= 50; i++) {
            System.out.println("Hello World!");
        }

        int num = 1;
        for (System.out.println('a'); num <= 3; System.out.println('c'), num++) {
            System.out.println('b');
        }
        //输出结果:abcbcbc


        //遍历:遍历100以内的所有偶数,输出所有偶数的和,输出偶数的个数
        int sum = 0;//记录所有偶数的和
        int count = 0;//记录偶数的个数
        for (int i = 1; i <= 100; i++) {

            if (i % 2 == 0) {
                System.out.println(i);
                sum += i;
                count++;
            }

        }
        System.out.println("总和为:" + sum);
        System.out.println("总个数为:" + count);


    }
}

ForTest1

/*
编写程序从1循环到150,并在每行打印一个值,
另外在每个3的倍数行上打印 foo
在每个5的倍数行上打印 biz
在每个7的倍数行上打印输出 baz

 */
public class ForTest1 {
    public static void main(String[] args) {

        for (int i = 1; i <= 150; i++) {

            System.out.println(i + "");

            if (i % 3 == 0) {
                System.out.println("foo");
            }
            if (i % 5 == 0) {
                System.out.println("biz");
            }
            if (i % 7 == 0) {
                System.out.println("baz");
            }


        }

    }


}

ForTest2

/*
题目 输入两个正整数m和n,求其最大公约数和最小公倍数
比如 12和20最大公约数为4,最小公倍数是60

 */
public class ForTest2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("请输入第一个正整数:");
        int m = scan.nextInt();

        System.out.println("请输入第二个正整数");
        int n = scan.nextInt();
        //获取最大公约数
        //获取两个数中的较小值
        int min = (m <= n) ? m : n;
        for (int i = min; i >= 1; i--) {
            if (m % i == 0 && n % i == 0) {
                System.out.println("最大公约数为:" + i);
                break;//一旦在循环中执行到break,就跳出循环
            }

        }

        //获取最小公倍数
        //1.获取两个数中的较大值
        int max = (m >= n)? m : n;
        //2.遍历
        for (int i = max;i <= m*n;i++ ){
            if (i % m == 0 && i % n == 0){

                System.out.println("最小公倍数:" + 1);
                break;
            }

        }
    }
    
}

ForWhileTest

/*
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序

 */

import java.util.Scanner;

public class ForWhileTest {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int positiveNumber = 0;//记录正数的个数
        int negativeNumber = 0;//记录负数的个数


        for (; ; ) {//while (true){

            int number = scan.nextInt();
            //判断number的正负情况
            if (number > 0) {
                positiveNumber++;
            } else if (number < 0) {
                negativeNumber++;
            } else {
                //一旦执行break,跳出循环
                break;
            }

        }
        System.out.println("输入的正数的个数为:" + positiveNumber);
        System.out.println("输入的负数的个数为:" + negativeNumber);
    }
}

ForForTest

/*
1.将一个循环结构声明在另一个循环结构的循环体中

外层循环
内层循环

内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
假设外层循环需要执行m次,内层循环需要执行n次,此时内层循环的循环体一共执行了m * n次

外层循环控制行数,内层循环控制列数
 */
public class ForForTest {
    public static void main(String[] args) {

        /*
         ******
         ******
         ******
         ******
         */

        for (int j = 1; j <= 4; j++) {
            for (int i = 1; i <= 6; i++) {
                System.out.print("*");//注意是print
            }
            System.out.println();
        }

        /*      i(行号)   j(*的个数)
         *       1        1
         **      2        2
         ***     3        3
         ****    4        4
         *****   5        5
         */
        for (int i = 1; i <= 5; i++) {//控制行数
            for (int j = 1; j <= i; j++) {//控制列数
                System.out.print("*");
            }
            System.out.println();
        }





        /*      i(行号)   j(*的个数) 规律:i+ j = 5 换句话说:j = 5 - i;
         ****    1        4
         ***     2        3
         **      3        2
         *       4        1


         */
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 5 - i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }



        //上半部分
        for (int i = 0;i < 5;i++){
            //输出空格
            for (int j = 0;j < 4 - i;j++){
                System.out.print(" ");
            }

            //输出*
            for (int k = 0;k < i + 1;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
        //下半部分
        for (int i = 0;i < 4;i++){
            for (int j = 0;j < i + 1;j++){
                System.out.print(" ");
            }
            for (int k = 0;k < 4 -i;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

WhileTest

/*
一,循环结构的四个要素
1,初始化条件
2,循环条件---是boolean类型
3,循环体
4,迭代条件
二,While循环的结构

1
While(2){
    3;
    4;
}

1.写while循环千万小心不要丢了迭代。一旦丢了,就可能导致死循环。要避免死循环
2.for循环和while循环可以相互转换
 区别:for循环和while循环的初始化条件部分的作用范围不同

 */
public class WhileTest {
    public static void main(String[] args) {

        //遍历100以内的所有偶数
        int i = 1;
        while (i <= 100) {

            if (i % 2 == 0) {
                System.out.println(i);
            }
            i++;

        }

        System.out.println(i);//101

    }
}

DoWhileTest

/*
一,循环结构的四个要素
1,初始化条件
2,循环条件---是boolean类型
3,循环体
4,迭代条件
二,While循环的结构

1
do{
    3;
    4;
}while(2);

1-3-4-2-3-4 ....

 */
public class DoWhileTest {
    public static void main(String[] args) {

        //遍历100以内的偶数,并计算所有偶数的和及偶数的个数
        int num = 1;
        int sum = 0;//记录总和
        int count = 0;//记录个数
        do {

            if (num % 2 == 0) {
                System.out.println(num);
                sum += num;
                count++;
            }

            num++;

        } while (num <= 100);

        System.out.println("总和为:" + sum);
        System.out.println("总个数为:" + count);

        //**************体会do-while至少执行一次的情况****************
        int number1 = 10;
        while (number1 > 10){
            System.out.println("i am while");
            number1--;
        }

        int number2 = 10;
        do {
            System.out.println("i am do while");
            number2--;
        }while (number2 > 10);
    }
}

跳出语句

BreakContinueTest

/*
相同点 关键字后面泵声明执行语句

break:  结束当前循环(switch-case与循环结构中使用)
continue:  结束当次循环(循环结构中使用)
 */
public class BreakContinueTest {
    public static void main(String[] args) {

        for (int i = 1; i <= 10; i++) {

            if (i % 4 == 0) {
                //break;//123
                continue;//123567910
            }
            System.out.print(i);
        }

        System.out.println("\n");
        //**********************

        Label:
        for (int i = 1; i <= 4; i++) {

            for (int j = 1; j <= 10; j++) {

                if (j % 4 == 0) {
                    //break;//默认跳出包裹此关键字最近的一层循环
                    //continue;

                    //break label;//结束指定标识的一层循环结构 (标签)
                    continue Label;//结束指定标识的一层循环结构当次循环
                }

                System.out.println(j);
            }

            System.out.println();
        }


    }
}

数组 (代码)

数组概念

ArrayTest

/*
一,数组的概述
    1.数组的理解:数组(Array),是多个相同类型数据按一定数据排列的集合,
    并使用一个名字命名,并通过编号的方式对这些数据进行统一管理

    2.数组相关的概念
    数组名
    元素
    角标,下标,索引
    数组的长度:元素的个数

    3.数组的特点:
    ①.数组是有序排列的
    ②.数组本身属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
    ③.创建数组对象会在内存中开辟一整块连续的空间
    ④.数组的长度一旦确定,就不能修改

    4.数组的分类
       ①按照维数:一维数组 二维数组 多维
       ②按照数组元素的类型:基本数据类型元素的数组,引用数据类型的数组

    5.一维数组的使用
       ①一维数组的声明和初始化
       ②.如何调用数组的指定位置的元素:通过角标的方式调用。
       ③.如何获取数组的长度
       ④.如何遍历数组
       ⑤.数组元素的默认初始化值
       ⑥.数组的内存解析

 */
public class ArrayTest {

    public static void main(String[]args){

        //1.一堆数组的声明和初始化
        int num;//声明
        num = 10;//初始化
        int  id = 1001;//声明+初始化

        int [] ids;//声明
        //1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
        ids = new int[]{1001,1002,1003,1004};
        //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
        String[] names = new String[5];//先把位置造好

        //2.如何调用数组的指定位置的元素:通过角标的方式调用。
        //数组的角标(或索引)从0开始的,到数组的长度-1结束。
        names[0] = "陈";
        names[1] = "刘";
        names[2] = "丁";
        names[3] = "华";
        names[4] = "徐";

        //3.如何获取数组的长度
        //属性:length
        System.out.println(names.length);//5
        System.out.println(ids.length);//4

        //4.如何遍历数组
        /*System.out.println(names[0]);
        System.out.println(names[1]);
        System.out.println(names[2]);
        System.out.println(names[3]);
        System.out.println(names[4]);*/

        for (int i = 0;i < names.length;i++){
            System.out.println(names[i]);
        }

        //5.数组元素的默认初始化值
        //数组元素是整型:0
        //数组元素是浮点型:0.0
        //数组元素是char型:0
        //数组元素是boolean型:false

        //数据类型是引用数据类型:null
        int[] arr = new int[4];
        for (int i = 0;i < arr.length;i++){
            System.out.println(arr[i]);
        }
        System.out.println("***************");

        short[] arr1 = new short[4];
        for (int i = 0;i < arr1.length;i++){
            System.out.println(arr[i]);
        }
        System.out.println("*************");
        float[] arr2 = new float[5];
        for(int i = 0;i < arr2.length;i++){
            System.out.println(arr2[i]);
        }
        System.out.println("***************");
        //char型
        char[] arr3 = new char[4];
        for (int i = 0;i < arr3.length;i++){
            System.out.println("----"  + arr3[i] + "****");
        }

        if (arr3[0] == 0){
            System.out.println("你好!");
        }

        System.out.println("***************");
        boolean[] arr4 = new boolean[5];
        System.out.println(arr4[0]);

        System.out.println("***************");
        String[] arr5 = new String[5];
        System.out.println(arr5[0]);
        if (arr5[0] == null){
            System.out.println("今天不错!");
        }


    }

}

数组练习

ArrayDemo1

/*
从键盘读入学生成绩,找出最高分,并输出学生成绩等级
成绩》=最高分-10 等级为A
成绩》=最高分-20 等级为B
成绩》=最高分-30 等级为C
其余           等级为D
 */

public class ArrayDemo1 {
    public static void main(String[]args){
        //1.使用Scanner,读取学生个数
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生人数:");
        int number = scanner.nextInt();

        //2、创建数组,存储学生成绩,动态初始化
        int[] scores = new int[number];
        //3,给数组中的元素赋值
        System.out.println("请输入" + number + "个学生成绩:");
        for (int i = 0;i < scores.length;i++){
            scores[i] = scanner.nextInt();
        }
        //4.获取数组中的元素的最大值:最高分
        int maxScorce = 0;
        for (int i = 0;i < scores.length;i++){
            if (maxScorce < scores[i]){
                maxScorce = scores[i];
            }
        }
        //5.根据每个学生成绩与最高分的差值,得到每个学生的等级,并输出等级和成绩
        char level;
        for (int i = 0;i < scores.length;i++){
            if (maxScorce - scores[i] <= 10){
                level = 'A';
            }else if (maxScorce - scores[i] <= 20){
                level = 'B';
            }else if (maxScorce - scores[i] <= 30){
                level = 'C';
            }else{
                level = 'D';
            }

            System.out.println("student" + (i+1) + scores[i] + ",grade is " + level);
        }
    }
}

YangHuiTest

/*
使用二维数组打印一个10行杨辉三角

1 第一行有一个元素,第n行有n个元素
2 每一行的第一个元素和最后一个元素都是1
3 从第三行开始,对于非第一个元素和最后一个元素的元素 即
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
 */
public class YangHuiTest {

    public static void main(String[] args) {
        //1.声明并初始化二维数组
        int[][] yangHui = new int[10][];

        //2.给数组的元素赋值
        for (int i = 0; i < yangHui.length; i++) {
            yangHui[i] = new int[i + 1];

            //2.1给首末元素赋值
            yangHui[i][0] = yangHui[i][i] = 1;
            //2.2给每行的非首末元素赋值
            // if (i > 1) {
                for (int j = 1; j < yangHui[i].length - 1; j++) {
                    yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
                }
                //}

            }

            //3.遍历二维数组
            for(int i = 0; i < yangHui.length; i++) {
                for (int j = 0; j < yangHui[i].length; j++) {
                    System.out.print(yangHui[i][j] + "  ");
                }
                System.out.println();
            }


        }
    }

二维数组

ArrayTest2

/*
二维数组的使用
1.一堆数组的声明和初始化
2.如何调用数组的指定位置的元素:通过角标的方式调用。
3.如何获取数组的长度
4.如何遍历数组
5.数组元素的默认初始化值
6.数组的内存解析
 */
public class ArrayTest2 {
    public static void main(String[] args) {
        //1.二维数组的声明和初始化
        int[] arr = new int[]{1, 2, 3};//一堆数组
        //静态初始化
        int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
        //动态初始化1
        String[][] arr2 = new String[3][2];
        //动态初始化2
        String[][] arr3 = new String[3][];

        //也是正确的写法:
        int[] arr4[] = new int[][]{{1, 2, 3}, {4, 5, 9, 10}, {6, 7, 8}};
        int[] arr5[] = {{1, 2, 3}, {4, 5}, {6, 7, 8}};//可省略new int 也是正确的写法

        //2.如何调用数组的指定位置的元素
        System.out.println(arr1[0][1]);//2
        System.out.println(arr2[1][1]);//null

        arr3[1] = new String[4];
        System.out.println(arr3[1][0]);

        //3.获取数组的长度
        System.out.println(arr4.length);//3
        System.out.println(arr4[0].length);//3
        System.out.println(arr4[1].length);//4

        System.out.println("**********************");
        //4.如何遍历二维数组
        for (int i = 0; i < arr4.length; i++) {

            for (int j = 0; j < arr4[i].length; j++) {
                System.out.print(arr4[i][j] + " ");
            }
            System.out.println();
        }
    }
}

ArrayTest3

/*
规定:二维数组分为外层数组的元素,内层数组的元素
        int[][] arr = new int[4][3];
        外层元素:arr[0],arr[1]
        内层元素:arr[0][0],arr[1][2]

        2.数组元素的默认初始化值
针对初始化方式一:比如 int[][] arr = new int[4][3];
        外层元素的初始化值为 地址值
        内层元素的初始化值为 与一维数组初始化情况相同

针对于初始化方式二 比如 int[][] arr = new int[4][];
        外层元素的初始化值为 null
        内层元素的初始化值为 不能调用,否则报错

        数组的内存解析
 */
public class ArrayTest3 {
    public static void main(String[]args){

        int[][] arr = new int[4][3];
        System.out.println(arr[0]);//地址值
        System.out.println(arr[0][0]);//0

        //System.out.println(arr);//地址值

        System.out.println("**************");
        float[][] arr1 = new float[4][3];
        System.out.println(arr1[0]);//地址值
        System.out.println(arr1[0][0]);//0.0

        System.out.println("**************");

        String[][] arr2 = new String[4][2];
        System.out.println(arr2[1]);//地址值
        System.out.println(arr2[1][1]);//null


    }
}

数组的复制,反转,查找

ArrayExer2

/*
算法的考查:数组的复制 反转 查找(线性查找 二分法查找)
 */
public class ArrayExer2 {
    public static void main(String[]args){

        String[] arr = new String[]{"jj","dd","mm","bb","gg","aa"};

        //数组的复制(区别与数组的赋值:arr1 = arr2)
        String[] arr1 = new String[arr.length];
        for (int i = 0;i < arr1.length;i++){
            arr1[i] = arr[1];
        }

        //数组的反转
        //方式一:
        /*
         for (int i = 0;i < arr.length / 2;i++){
            String temp = arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = temp;
        }
         */


        //方式二:
        for (int i = 0,j = arr.length - 1;i < j;i++,j--){
            String temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        //遍历
        for (int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + "\t");

        }
        System.out.println();


        //查找(或搜索)
        //线性查找:

        String dest = "bb";

        boolean isFlag = true;

        for (int i = 0;i < arr.length;i++){

            if (dest.equals(arr[i])){
                System.out.println("找到了指定的元素,位置为:" + i);
                isFlag = false;
                break;
            }
        }
        if (isFlag){
            System.out.println("很遗憾,没有找到哦!");
        }

        //二分法查找(折半查找)
        //前提:所要查找的数组必须有序
        int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333};

        int dest1 = -34;
        int head = 0;//初始的首索引
        int end = arr2.length - 1;//初始的末索引
        boolean isFlag1 = true;
        while (head <= end){

            int middle = (head + end)/2;

            if (dest1 ==arr2[middle]){
                System.out.println("找到指定的元素,位置为:" + middle);
                isFlag1 = false;
                break;
            }else if(arr2[middle] > dest1){
                end = middle - 1;
            }else {//arr2[middle] < dest1
                head = middle + 1;
            }
        }

        if (isFlag1){
            System.out.println("很遗憾,没有找到啦!");
        }


    }
}

冒泡排序

BubbleSortTest

/*
数组的冒泡排序的实现
 */
public class BubbleSortTest {
    public static void main(String[] args){

        int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};

        //冒泡排序
        for (int i = 0;i < arr.length - 1;i++){

            for (int j = 0;j < arr.length - 1 - i;j++){

                if (arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

            }
        }
        for (int i = 0;i < arr.length;i++){
            System.out.println(arr[i] + "\t");
        }


    }
}

数组常见异常

ArrayExceptionTest

/*
数组中的常见异常
1.数组角标越界的异常:ArrayIndexOutOfBoundsException

2.空指针异常:NullPointerException
 */
public class ArrayExceptionTest {
    public static void main(String[] args) {

        //角标越界
        int [] arr = new int[]{1, 2, 3, 4, 5};

        //for (int i = 0;i <= arr.length;i++){
        //    System.out.println(arr[i]);
        //}

        //2.2 空指针异常
        //情况一:
        //int[] arr1 = new int[]{1,2,3};
        //arr1 = null;
        //System.out.println(arr1[0]);

        //情况二:
        //int [][] arr2 = new int[4][];
        //System.out.println(arr2[0][0]);

        //情况三:
        //String[] arr3 = new String[]{"AA","BB","CC"};
        //arr3[0] = null;
        //System.out.println(arr3[0].toString());
    }
}

举报

相关推荐

Java基础复习-------day01

Java复习day01

Java基础再复习

Java基础复习:注解

java基础复习篇

Java基础(01)

JAVA基础01

Java基础01

Java面试 基础复习02

0 条评论