Java 笔记

运算符

class Oparator{
    /**
    1.算数运算符
    +(加) -(减) *(乘) /(除) %(取余) =(赋值) ++(前,后加加) --(前,后减减) +(连接符)

    */
    public static void main(String[] args) {
        //+(加)
        int num1 = 12;//给num1赋值赋值
        int num2 =24;//给num2赋值赋值
        int num3 = num1 + num2;//运算
        System.out.println(num3);//结果36
        //-(减)
        int reduce1 = 3; 
        int reduce2 = 5;
        int result = reduce2 - reduce1;
        System.out.println(result);//结果2
        //  /(除)
        double a = 12.2;
        double a1 = 2;
        double a3 = a/a1;
        System.out.println(a3);//结果6.1
        // *(乘)
        byte b1 = 3;
        byte b2 = 5;
        //byte b = b1 + b2;报错从int转换到byte可能会有损失
        int b = b1 * b2;
        System.out.println(b);//结果15
        // %(取余)
        int c = 30;
        int c1 = c%12;
        System.out.println(c1);//答案为6
        //练习题:三位数字分别指出个位十位和白位
        int num4 = 357;
        int g = num4%10;
        int s = num4%100/10;
        int bw = num4/100;
        System.out.println("个位数位:"+g);//个位数位:7
        System.out.println("十位数位:"+s);//十位数位:5
        System.out.println("百位数位:"+bw);//百位数位:3
        System.out.println("=====================================================");
        //++(自增)   --(自减)
    }
}
class Add{
    //2.赋值运算符   ++(自增)   --(自减)
    public static void main(String[] args) {
        int a = 15;
        a++;//相当于a=a+1;或者a+=1;
        System.out.println(a);
        int b = a++;//先运算再++
        int c = ++a;//先++再运算
        System.out.println("a="+a+",b="+b+",c="+c);//a=17,b=16,c=18
        //使用++或者--数据类型不会改变
        //(a++)++错误
        //--和++类似一个加一个减,不能重叠使用
        /**
        赋值运算符=
        拓展 +=  -=   %=   /=   *=
        */
        int i = 3;//把3放在i里面,为简单的赋值,
        int i1=4;
        i+=3;
        i1=i1+3;
        System.out.println(i1);
        System.out.println(i);
        byte i3 = 5;
        byte i4 = 6;
        i3+=5;//这样的赋值计算不会改变数据类型,比i3=i3+5;好用;int类型看不出来,
        //i4=i4+5;报错从int转换到byte可能会有损失
        System.out.println(i3);
        //System.out.println(i4);
        //同理其他的也是一样

    }

}
class ComparisonOperator{
    /**
    3.比较运算符
    ==(比较是否相等) !=(是否不相等)  <(小于)  >(大于) <==小于等于    >=(大于等于)
    返回的值都是bouble类型,ture false 
    ==和=差距好大
    */
    public static void main(String[] args) {
        int a = 10;
        int b =11;
        System.out.println(a==b);//false
        System.out.println(a=b);//11   是把b的值11给了a所以结果为11
        boolean a1 =true;
        boolean b1 =false;
        System.out.println(a1==b1);//false
        System.out.println(a1=b1);//false  把b1的值赋给了a1,最后输出
        //其他比较符用法差不多  
    }
}

class Logic{
    /**
    4.逻辑运算符
    1.&(逻辑与) 2.&&(短路与) 3.|(逻辑或) 4.||(短路或) (5.^(异同)  6.! (非))非常少用 
    */
    public static void main(String[] args) {
        //&   &&
        int a = 0;
        int b = 100;
        if (a==0&b==100) {
            System.out.println("满足要求");//满足要求,表示两个都要满足为ture,其中一个不满足为false,&&和&结果都是一样的
        }
        //&和&&的不同点
        int a1 = 1;
        int b1 = 100;
        if (a1>10&b1<(b1++)) {
            System.out.println(a1);
        }
        int b3 =99;
    System.out.println(b1);//结果为101
        if (a1>10&&b1<(b3++)) {
            System.out.println(a1);
            }
            System.out.println(b3); //结果为99
            //总结;&逻辑与第一个为false后面的代码还是会继续运行完,所以b1进行了加加的操作
            //     &&短路与第一个为false时后面的代码不会去执行了,直接跳过,如果为ture后面的代码才会执行
            System.out.println("===============================");
            // |(逻辑或) ||(短路或)
            //满足其中一个都可以为ture
            int c = 12;
            int c1 = 44;
            if (c>0|c1>100) {
                System.out.println("满足了c,没有满足c1,"); 
            }
            // ||与|的区别
            if (c>0||c1>(c++)) {//
                System.out.println("使用||的c="+c);    //使用||的c=12
            }
            if (c>0|c1>(c++)) {
                System.out.println("使用|的c="+c);  //使用|的c=13 
            }
            //总结:当第一个判断成立时|还是会去执行下面的代码,||不会执行了
    }
}
class Bit{
    /**
    5.位运算符
    表示在2进制内部去移动
    <<   左移
    >>   右移
    >>>  无符号右移
    &。  与
    |    或
    ^    异或   提取不相同的值
    ~    取反  取2进制相反的值(用的少做了解)
    */
    //<<左移
    public static void main(String[] args) {
        int a =3;
        System.out.println(a<<3);//结果为24,3*2的3次方
        byte b = 4;
        System.out.println(b<<2);//结果为16,4*2的2次方
        //结论:向左移动几位就是*与2的几次方,
        byte c =100;
        System.out.println(c<<4);//1600,会自动去换数据类型
        //>> 右移 可想和上面的一样只是除与移动位的次方
        //>>>  无符号右移
        int e = -10;
        System.out.println(e>>2);//结果为3
        int d = -10;
        System.out.println(d>>>2);//结果为1073741821
        //&   |   这个和逻辑里的不一样,但是一样的相似
        //&计算机底层2进制数的计算,两个数的2进制数,都为1时为1,为1和0时为0,0和0是为0,得出来的2进制数为结果
        //|计算机底层2进制数的计算,两个数的2进制数,都为1时为1,为1和0时为1,0和0是为0,得出来的2进制数为结果
        int a1 = 6;//0110
        int b1 = 3;//0011
        int c1 = a1&b1;
        int c2 = a1|b1;
        System.out.println(c1);//结果2 0010
        System.out.println(c2);//结果7 0111

    }
}
class TernaryOperator{
    /**
    6.三元运算符
    格式:(条件表达式)?表达式1:表达式2;
    为ture是执行表达式1,为false时执行表达式2,使用结果为boolean联系
    注意:
    接收到的值一定要是一个相同类型
    能用三元写的代码在判断语句里都可以实现
    */
    public static void main(String[] args) {
        int a2 = 10;
        int b2 =11;
        int max = (a2>b2) ? a2:b2;//必须有东西去接收,
        //int mix = (a2>b2) ? "zhang":3;  报错:不兼容的类型: 条件表达式中的类型错误int mix = (a2>b2) ? "zhang":3;String无法转换为int
        System.out.println(max);
    }
}

流程控制:

1.顺序:代码从上往下按照顺序流程走下来
2.分支:作出选择,为true执行if里的,为flash不执行往下走,为boolean类型
3.循环:满足要求时循环要执行的代码块,直到不满足要求跳出循环,为boolean类型

public class IfText {
    /**
     分支结构1:if.....else
     三种用发:1.不满足直接跳过,2.两个选择其中一个执行,3.多个里去从上往下找到满足的跳出,多选1
        1:if(条件表达式){
                执行表达式
           }
        2:if(条件表达式1){
                执行表达式1
         }else{
                执行表达式2
        }
        3.if(条件表达式1){
                执行表达式1
        }else if(条件表达式2){
                执行表达式2
        }else if(条件表达式3){
                执行表达式3
        }
        ......
        else{
                执行表达式n
        }
     */
        public static void main(String[] args){
     //测试1
            int age = 12;
            if (age>=18){
                System.out.println("你已经成年了。");//没有输出
            }
     //测试2
            if (0<age&&age<18){
                System.out.println("您还未成年");
            }else{
                System.out.println("您已经成年了");
            }
     //测试3
            if (age<0&&age<120){
                System.out.println("输入错误不是您的年龄");
            }else if(age<20){
                System.out.println("少年时期");
            }else if (age<35){
                System.out.println("青年时期");
            }else if(age<60){
                System.out.println("中年时期");
            }else if (age<80){
                System.out.println("老年时期");
            }else{
                System.out.println("长命百岁");
            }
/**分支结构2

 */
        }
}

输入函数Scanner

package 输入函数;

/**
 输入函数:Scanner
        三步
        1.导包import java.util.Scanner;
        2.Scanner的实例化Scanner sc = new Scanner(System.in);
        3.调用Scanner int a = sc nextInt();

 */
import java.util.Scanner;//导包
public class ScannerText {
    //使用方法,有各种类型
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);//对Scanner实例化
        //练习键盘输出个人信息
        System.out.print("请输入你的姓名:");
        String name = sc.next();
        System.out.print("请输入你的年龄:");
        int age = sc.nextInt();
        System.out.print("请输入你的性别true(男)/flash(女):");
        boolean gender = sc.nextBoolean();
        System.out.print("请输入你的身高:");
        double height = sc.nextDouble();
        System.out.println(name);
        System.out.println(age);
        System.out.println(gender);
        System.out.println(height);
    }

}

switch-case基本用法

package 分支结构;

/*
    分支结构2:
        switch-case
            1.格式
                switch(表达式) {
                    case 常量1:
                        执行语句1;
                        //break
                可以多个case一起使用
 default:
 执行语句你;
 }
 */
import java.util.Scanner;
public class SwitchTest {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        byte a = sc.nextByte();
        switch (a){
            case 1:
                System.out.println("one");
            case 2:
                System.out.println("two");
            case 3:
                System.out.println("three");
            case 4:
                System.out.println("four");
            default:
                System.out.println("不是1,2,3,4");
/*
输入2时结果为:
2
two
three
four
不是1,2,3,4
注意:
    1.当case进入时后面的case全部都会被执行,遇到break关键字才会跳出或者到代码结束
    2.a这个表达式不是条件表达式
    3.判断的是==的
    4.类型只能是byte,char,short,int,String,枚举类型,这6个类型其中一个不能出现boolean类型
    5.default相对与if-else里的else,不过他可以放在任意位置都可以;可不使用
break;是跳出的意思switch-case一般都是和break一起用,没有不影响编译
 */
            System.out.print("请输入现在的季节:");
            String season = sc.next();
            switch (season){
                case "春":
                    System.out.println("春天到了");
                    break;
                case "夏":
                    System.out.println("夏天到了");
                    break;
                case "秋":
                    System.out.println("秋天到了");
                    break;
                case "冬":
                    System.out.println("冬天到了");
                    break;
                default:
                    System.out.println("没有这个季节");
                    //brick可有可无
            }

        }
    }

}

for循环

package 分支结构;
/*
    分支结构3:
        for循环
        结构for(1⃣️;2⃣️;3⃣️){
            代码块4⃣️
        }
        执行顺序1⃣️-->2⃣️满足-->3⃣️-->4⃣️-->2⃣️-->3⃣️-->4⃣️。。。。。。
        一般用于循环输入,2⃣️的结果都是ture或者float

 */
import java.util.Scanner;
public class Fortest {
    //列题1
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int i=1;
        for (System.out.println("我是1");i<=3;System.out.println("我是语句3"),i++){
            System.out.println("我是语句4");//看看顺序
        }
        /*
我是1
我是语句4
我是语句3
我是语句4
我是语句3
我是语句4
我是语句3
         */
        //练习2,循环输入1到150是3的倍数后面加a 为5的倍数后面加一个b,为7的倍数后面加一个c,是他们三个的倍数加个abc
       /* for (int num1=1;num1<=150;num1++){
            if (num1%3==0){
                System.out.println(num1+"a");
            }else if (num1%5==0){
                System.out.println(num1+"b");
            }else if (num1%7==0) {
                System.out.println(num1 + "c");
            }
            else if (num1%5==0&&num1%3==0&&num1%7==0){
                System.out.println(num1+"abc");
            }else{
                System.out.println(num1);
            }
        }//方法不对,不但复杂还达不到效果,因为if-else只能多选一
        */
        for(int a=1;a<=150;a++){
            System.out.print(a+"--");//不能使用换行ln
            if (a%3==0){
                System.out.print("a");
            }
            if (a%5==0){
                System.out.print("b");
            }
            if (a%7==0){
                System.out.print("c");
            }
            System.out.println();//每一次代码块执行完进行换行
        }
        //列题3,键盘输入循环几次循环体
        System.out.print("请输入要循环输出多少次:");
        int num2 = sc.nextInt();
        System.out.print("请输入要·循环的内容:");
        String content= sc.next();
        for (int num3=1;num3<=num2;num3++){
            System.out.println(content);
            /*结果:
请输入要循环输出多少次:2
请输入要·循环的内容:HelloWord
HelloWord
HelloWord
             */
        }
        //例题四
        //打印1到100所有的奇数的和
        int num3 = 0;
        for (int a=0;a<=100;a++) {
            if (a % 2 == 1) {
                num3 += a;
            }
        }
        System.out.println(num3);
       //列题五
        //输入两个数求他们的最大公倍数和最小公约数
        System.out.print("请输入第一个正整数:");
        int num4= sc.nextInt();
        System.out.print("请输入第二个正整数:");
        int num5= sc.nextInt();
        int num6=(num4>num5)?num5:num4;
        int num8=(num4>num5)?num4:num5;
        int num7=0;
        for (int num=num6;num>=0;num--) {
            if (num4 % num == 0 && num5 % num == 0) {
                System.out.println("最大倍数为:" + num);
                break;
            }
        }
        for (int num9=num8;num9<=num4*num5;num9++){
            if (num9%num4==0&&num9%num5==0){
                System.out.println("最小公倍数为:"+num9);
                break;
            }
        }
    }
}

while

package 分支结构;
/*
while循环:
    结构:
        初始化值1⃣️
        while(判断条件2⃣️){
            执行语句3⃣️
            迭代条件4⃣️
        }
        执行顺序和for循环一样,2⃣️为boolean类型
        for和while都可互相转换
        注意4⃣️把你少不然会变死循环,写程序要避免死循环

 */

public class WhileTest {
    public static void main(String[] args){
        //用while循环0到100的奇数的和
        int a = 0;
        int b=0;
        while (a<=100){
            if (a%2==1){
              b+=a;
            }
        a++;//不能忘记
        }
    System.out.println(b);
    System.out.println(a);//101
    }
}

do-while

package 分支结构;
/*
do-while循环:
    语法:
    初始化值1⃣️
    do{
        循环体2⃣️
        迭代条件3⃣️
    }while(判断条件4⃣️);
    顺序为1⃣️-->2⃣️-->3⃣️-->4⃣️-->2⃣️-->3⃣️-->4⃣️....-->3⃣️--判断4⃣️不通过直接跳出
    和for,while的差别就是do-while不管是去执行一次然后再进行判断。
    do-while平时很少用
 */

public class DoWhileTest {
    public static void main(String[] args){
        //使用do-while输出1到100所有的偶数
        int a=0;
        do {
            if (a%2==0){
                System.out.println(a);
                //a++;注意 迭代条件不要放在循环体里
            }
            a++;
        }while (a<=100);

    }
}

总结练习

package 分支结构;
/*
利用for嵌套输入九九乘法表
 */

public class NineNineTable {
    public static void main(String[] args){
        int a=1;
        int b=1;
        for (int i=1;i<=9;i++){
            for (int j=1;j<=i;j++){//每次for循环跳出后再进入会重写开始
                System.out.print(j+"x"+i+"="+i*j+"|");
            }
            System.out.println();//容易出错误的,每次内循环结束后要进行换行
        }
        /*
结果:
1x1=1|
1x2=2|2x2=4|
1x3=3|2x3=6|3x3=9|
1x4=4|2x4=8|3x4=12|4x4=16|
1x5=5|2x5=10|3x5=15|4x5=20|5x5=25|
1x6=6|2x6=12|3x6=18|4x6=24|5x6=30|6x6=36|
1x7=7|2x7=14|3x7=21|4x7=28|5x7=35|6x7=42|7x7=49|
1x8=8|2x8=16|3x8=24|4x8=32|5x8=40|6x8=48|7x8=56|8x8=64|
1x9=9|2x9=18|3x9=27|4x9=36|5x9=45|6x9=54|7x9=63|8x9=72|9x9=81|
         */
    }
}
package 分支结构;
//输出100以内所有的质数

public class Test {
    public static void main(String[] args){
        //boolean a = true;这个要放在循环里面
        for (int i=2;i<100;i++){
            boolean a = true;
            for (int j=2;j<i;j++){
                if(i%j==0){
                    a=false;
                }

            }
            if (a==true) {
                System.out.println(i);
            }

        }
        //列题五
        //输入两个数求他们的最大公倍数和最小公约数
        System.out.print("请输入第一个正整数:");
        int num4= sc.nextInt();
        System.out.print("请输入第二个正整数:");
        int num5= sc.nextInt();
        int num6=(num4>num5)?num5:num4;
        int num8=(num4>num5)?num4:num5;
        int num7=0;
        for (int num=num6;num>=0;num--) {
            if (num4 % num == 0 && num5 % num == 0) {
                System.out.println("最大倍数为:" + num);
                break;
            }
        }
        for (int num9=num8;num9<=num4*num5;num9++){
            if (num9%num4==0&&num9%num5==0){
                System.out.println("最小公倍数为:"+num9);
                break;
            }
        }
    }
}
package 分支结构;
/*
练习 :输入任意多个整数,输入0的时候结束,计算出输入的数中的最大值和最小值
 */
import java.util.Scanner;
public class Exercise {
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        int max=0;
        int min=0;
        int a1=0;
        int b=0;
        for (int a=0;a==0;a=0){
            System.out.print("请输入一个整数:");
            int num = sc.nextInt();
            if (num>0) {
                if (max < num) {
                    max = num;
                } else if (min > num) {
                    min = num;
                }
                a1++;
            }
            if (num<0) {
                if (max < num) {
                    max = num;
                } else if (min > num) {
                    min = num;
                }
                b++;
            }
            if (num==0){
                break;//break也可以跳出循环
            }
            }
        System.out.println("最大值为:"+max);
        System.out.println("最小值为:"+min);
        System.out.println("输入的正数为:"+a1);
        System.out.println("输入的负数为:"+b);
        }
}

优化代码提高效率

package 分支结构;
/*
对10000内质数输出查看有多少的优化
新知识点:查看时间函数System.currentTimeMillis();可以利用查看代码执行的时间单位为毫秒
开根号函数Math.sqrt();获取这个数的根号
*/

public class Optimize {
   public static void main(String[] args){
       int num1=0;
      long b=  System.currentTimeMillis();//获取当前时间距离1970-01-01 00.00.00的毫秒数
       for (int num=2;num<=100000;num++){
           boolean a= true;
           for (int j=2;j<=Math.sqrt(num);j++){
               if (num%j==0){
                   a=false;
                   break;
               }

           }
           if (a==true) {
               num1++;
           }
       }
       System.out.println("一共有"+num1+"个质数");
      long c= System.currentTimeMillis();//获取当前执行完代码时间距离1970-01-01 00.00.00的毫秒数
       System.out.println(c-b);//代码执行时间
       //没有优化时候为23346,在判断num%j下加个break;优化不是质数的数不要一个一个都进去时间为2933毫秒
       //在加break的同时把num加个根号时间为32,代码执行效率真的挺重要,要有高的吞吐量计算机算法效率一定要高;

   }
}

break和continue比较

package 分支结构;
/*
结束语句的比较和作用
break:用于循环还有if-else,while-case,跳出当前循环
Continue:用于循环还有if-else,跳出这一次循环
相同点但是跳出,还有他们后面都不能放东西,编译直接不通过,
 */


public class BreakContinue {
    public static void main(String[] args){
        for (int i =1;i<100;i++){
//            if (i%4==0){
//                break;
//            }
//            System.out.print(i);//123
            if (i%4==0){
                continue;
            }
            System.out.print(i);//123567910111314151718192122232526272930.......99
        }
        //他们两个都是结束靠近自己的for循环里如何结束外外的for呢
        for (int i=0;i<200;i++){
            for (int j=1;j<100;j++){
                if (j%4==0){
                    break;
                }
                System.out.print(j);//123123123123123123123123123123.......123
            }

        }
        System.out.println("");
        a:for (int i=0;i<200;i++){
            for (int j=1;j<100;j++){
                if (j%4==0){
                    break a;//直接指定跳出哪一个
                }
                System.out.print(j);//123
            }

        }
    }
}

记录资金情况小项目

package Bookkeeping;

/*
做出一个自己的记录自己的收入和开支
*/
import java.util.Scanner;
public class FamilyAccount {
   public static void main(String[] args){
       Scanner sc=new Scanner(System.in);
       String fundSituation="";
       int total=0;
      one: for (;;){
           System.out.println("------------------个人收入和开支情况-----------------");
           System.out.println("|\t\t\t\t\t\t\t\t\t\t\t\t |");
           System.out.println("|\t\t\t\t\t1 收支明细\t\t\t\t\t |");
           System.out.println("|\t\t\t\t\t2 登记收入\t\t\t\t\t |");
           System.out.println("|\t\t\t\t\t3 登记支出\t\t\t\t\t |");
           System.out.println("|\t\t\t\t\t4 退出\t\t\t\t\t\t |");
           System.out.println("--------------------------------------------------");
           System.out.print("\t\t\t\t\t请选择(1--4):");
           int option = sc.nextInt();
           switch (option){
               case 1:
                   System.out.println("------------------当前收支明细记录-----------------");
                   System.out.println("收支\t\t 账户金额\t\t\t收支金额\t\t说\t明");
                   System.out.println(fundSituation);
                   break ;
               case 2:
                   System.out.print("本次收入的金额:");
                   int money=sc.nextInt();
                   System.out.print("本次收入说明:");
                   String cause=sc.next();
                   total+=money;
                   fundSituation+=("收入"+"\t\t "+total+"\t\t\t\t"+money+"\t\t"+cause+"\n");
                   System.out.println("------------------记录完成输入1可查看-----------------\n");
                   break;
               case 3:
                   System.out.print("本次支出的金额:");
                   int money_2=sc.nextInt();
                   System.out.print("本次支出说明:");
                   String cause_2=sc.next();
                   if (money_2>total){
                       System.out.println("您好您的钱不够");
                   }else {
                       total-=money_2;
                       fundSituation+=("支出"+"\t\t "+total+"2\t\t\t\t"+money_2+"   \t\t"+cause_2+"\n");
                       System.out.println("------------------记录完成输入1可查看-----------------");
                   }
                   break;
               case 4:
                   two:for (;;) {
                       System.out.print("是否确定退出y确定n不退出(y/n)");
                       String yn = sc.next();
                       char ny=yn.charAt(0);
                       if (ny =='y'||ny=='Y') {
                           break one;
                       } else if (ny=='n'||ny=='N') {
                                  break two;
                       } else {
                           System.out.println("输出有错误重新收入");
           }
       }
               default:
                   System.out.println("输入错误请输入1到4的的数");


}
       }
   }
}

数组

一维数组
package array;
/*
一.数组的概述
1.理解:数组(Array),是多个相同类型的元素按照一定的顺序排序的集合,使用一个名字命名,
       可以通过编号对数据进行管理。
2.概念:
>数组名
>元素
>角标,下标,索引
>数组的长度,元素的个数

3.特点:
>数组是有序排列的
>数组是引用数据类型。不过数组里的元素可以是基本数据类型和引用数据类型;
>创建数组对象在内存里开辟一整块连续的空间
>数组长度一旦确定就不能去修改了,处理方法可以重新开辟一个数组,重新设置长度

 4.分类
    维数分类:一维数组,二维数组,三维数组,,,,,。。。。。多维
    按数据类型分类:引用数据类型,基本数据类型。

5.一维数组
>声明和初始化
>然后调用数组里的元素
>如何获取数组长度
>如何遍历数组元素
>数组元素的默认初始化值
>内存如何分配,内存解析
 */

public class ArrayTest01 {
    public static void main(String[] args){
//一维数组
//声明和初始化
        //静态初始化,初始化和数组元素赋值同时进行
        int[] id;//初始化
        id = new int[]{0,1,2,3,4,5,6,7,8,9};//直接赋值,开辟了10个空间
        //动态初始化,初始化和元素赋值分开进行的
        String[] name=new String[3];//直接开辟一个3个单位的数组,没有值,
//容易出现的写法错误
        //int[] arr1=new int[];没有分配空间或者没有给元素赋值
//如何获取数组里的元素
        System.out.println(id[0]);
        name[0]="张三";
        name[1]="李四";
        name[2]="王五";
        System.out.println(name[2]);
//如何获取数组长度
        //利用length方法
        System.out.println(id.length);//10
        System.out.println(name.length);//3
//如何遍历元素里的值
        int i=0;
        for (int j=0;j<name.length;j++){
            System.out.println(name[j]);
        }
        for (int j=0;j<id.length;j++){
            System.out.println(id[j]);
        }
//系统默认初始化值
        String[] love=new String[5];
        for (int j=0;j<love.length;j++){
            System.out.println(love[j]);//null,所以默认为零值,
        }
        int[] age=new int[5];
        for (int j=0;j<age.length;j++){
            System.out.println(age[j]);//0,结果为0
        }
        boolean[] arr1=new boolean[4];
        for (int j=0;j<arr1.length;j++){
            System.out.println(arr1[j]);//false
        }


    }
}

二维数组
package array;
/*
二.  二维数组
     一维数组里包含了一个数组在计算机底层看没有什么多维数组,和if里的嵌套类似

     5.二维数组
>声明和初始化
>然后调用数组里的元素
>如何获取数组长度
>如何遍历数组元素
>数组元素的默认初始化值
>内存如何分配,内存解析
 */
public class ArratTest03 {
    public static void main(String[] args){
        //一维数组初始化
        int[] arry1=new int[]{1,2,3,4};
        //二维数组初始化,静态
        int[][] arry2=new int[][]{{1,2,3},{2,3,4},{7,8,9}};
        //动态初始化
        String[][] arry3=new String[3][2];
         //获取数组长度
        System.out.println(arry2.length);//3   获取外面一层的长度
        System.out.println(arry2[0].length);//7   获取数组里的数组的长度
        //如何遍历数组元素
        //用嵌套循环来遍历
        for (int i=0;i<=arry1.length;i++){
            for (int j=0;j<arry2[i].length;j++){
                System.out.print(arry2[i][j]+"  ");
            }
            System.out.println("");
        }
        //数组元素的默认初始化值
        System.out.println(arry2[1]);
        
            //数组元素的默认初始化值
            System.out.println(arry2[0]);//[I@29453f44 地址
            System.out.println(arry3[0][1]);//null 内初始值和一维数组默认值一样
            String[][] arry5=new String[4][2];
            System.out.println(arry5[2]);//[Ljava.lang.String;@5cad8086
            //System.out.println(arry4[0][0]);报错,没有指针
            //总结:二维数组的初始值外面的是地址,里面的和一维一样。
    }
}
练习
package array;
/*
输入几个学生和对应的成绩评出他们最高值,和评分:低于最高分10分为A
                                        低于最高分20分为B
                                        低于最高分30 分为C
 */
import java.util.Scanner;
public class ArratTest02 {
    public static void main(String[] args){
        int max=0;
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入学生的个数:");
        int num = sc.nextInt();
        int[] a=new int[num];
        for (int j=0;j<a.length;j++) {

            System.out.print("请输入第" + (j + 1) + "个学生成绩");
            a[j] = sc.nextInt();
            if (max < a[j]) {
                max = a[j];
            }
        }
        System.out.println("最高分为:"+max);
        for (int i=0;i<a.length;i++){
             if (max==a[i]) {
                    System.out.println("恭喜第一名:"+a[i]);
             } else if (a[i]>=max-10) {
                 System.out.println("等级为A:"+a[i]);
             }else if (a[i]>=max-20){
                 System.out.println("等级为B:"+a[i]);
             }else if (a[i]>=max-30){
                 System.out.println("等级为C:"+a[i]);
             }else {
                 System.out.println("等级为C:"+a[i]);
             }
        }

        System.out.println(max);
    }
}

练习2
package array;
//杨辉三角
public class ArrayTest {
    public static void main(String[] args){
        int[][] yhsj=new int[10][];//创建一个二维数组,确定一维的长度,二维先不确定
        for (int i=0;i< yhsj.length;i++){
            yhsj[i]=new int[i+1];//利用for循环确定二维数组的长度
            for (int j=0;j<yhsj[i].length;j++){
                yhsj[i][0]=1;
                yhsj[i][i]=1;//利用i的值给确定为一的数赋值
                //if(i>1) {
                    for (int a=1;a<i;a++) {
                        yhsj[i][a] = yhsj[i - 1][a] + yhsj[i - 1][a - 1];//利用循环和i的值确定对应的值
                    }
                //}
            System.out.print(yhsj[i][j]+"\t");//便利所有的元素
        }
            System.out.println("");//换行
        }
    }
}

数组的复制和搜索

package array;
//复制,搜索
import java.util.Scanner;
public class ArrayTest05 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int[] array1,array2,array3;
        array1=new int[]{23,34,56,67,34,56,24,582,54};
        array2=array1;//将array1的赋值给array2
        //修改啊array2里所有的下标为奇数的数
        for (int i=0;i<array2.length;i++){
            if (i%2!=0){
                array2[i]=i;
            }
            System.out.print(array1[i]+"\t");//23   1   56  3   34  5   24  7   54 array1的值和array2的还是一模一样;说明没有开辟新空间
        }
        //复制array2到array3
        array3=new int[array2.length];
        for (int i=0;i<array2.length;i++){
            array3[i]=array2[i];
        }
        System.out.println("");
        for (int i=0;i<array3.length;i++){
            System.out.print(array3[i]+"\t");
        }

        //搜索24
        int a= sc.nextInt();
        int b=0;
        for (int i=0;i<array3.length;i++){
            if (array3[i]==a){
                System.out.println("\n搜索到了下标为"+i);
                b=1;
            }
        }
        if (b==0){
            System.out.println("\n很遗憾没有搜索到你想要的数");
        }
        for (int j=1;j<array2.length/2;j++){

        }
    }
}

求数组最大值,最小值,和,平均数

package array;
/*
求数组的最大值,最小值,和,平均值
 */

public class ArrayTesy06 {
    public static void main(String[] args) {
        int[] arr = new int[]{34, 34, 56, 76, 34, 45, 56, 23, 67, 87};
        int max=0;
        int min=0;
        int add=0;
        //最大值
        for (int i = 0; i < arr.length; i++) {
            if (arr[0] <= arr[i]) {
                max = arr[i];
            }
        }
        System.out.println("最大值为:" + max);
        //最小值
        for (int i = 0; i < arr.length; i++) {
            if (arr[0] >= arr[i]) {
                min = arr[i];
            }
        }
        System.out.println("最小值为"+min);
        for (int i=0;i<arr.length;i++){
            add+=arr[i];
        }
        System.out.println("和为:"+add);
        System.out.println("平均值为:"+add/arr.length);
    }
}

数组的工具类和经见的异常

package array;
import java.util.Arrays;

public class ArrayText {
    /*
数组的常用的工具类
异常
    1  角标异常
    2  空指异常
 */
        public static void main(String[] args){
            int[] arr1=new int[]{12,23,45,67,675,67,45,67,456,46,56,46};
            int[] arr2=new int[]{12,23,45,67,675,67,45,67,456,46,56,46};
            int[] arr3=new int[]{34,43,45,65,765,56,56,45,46,56,78,78,67};
            //判断两个数组是不是相等
            boolean a=Arrays.equals(arr2,arr1);
            System.out.println(a);//true 所有的数但是一一对应才相等
            //输出数组信息
            System.out.println(Arrays.toString(arr1));//为String类型的数
            //指定数加入数组
            Arrays.fill(arr2,110);//把所有的数改110
            System.out.println(Arrays.toString(arr2));//[110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110]
            //数组的排序
            Arrays.sort(arr1);
            System.out.println(Arrays.toString(arr1));//[12, 23, 45, 45, 46, 46, 56, 67, 67, 67, 456, 675]
            //在数组找自己想找的数,二分找
            int b=Arrays.binarySearch(arr3,45);
            System.out.println(b);//2  找不到为负数
            if(b<0){
                System.out.println("没有找到");
            }
    }
}

面向对象

简单的面向对象了解

package 对象1;
/*
特点:继承性,封装性,多态性,(抽象性)
一.面向对象两大要素
1.类:对一个事物的描述,是抽象的,概念上的定义
2.对象:是个实实在在存在的东西可以摸到的

属性:成员变量  fidld 域  自带的一种属性
方法:行为 函数 成员方法 method

三大步骤
1.创建类定义属性和方法
2.类的实例化
3.调用创建的类
 */

public class dom01 {
    public static void main(String[] args) {
        person p1 = new person();
        p1.name="张三";
        p1.age=20;
        p1.isMale=true;
        p1.color="yellow";
        System.out.println("姓名:"+p1.name);
        p1.pdan(p1.isMale);
        System.out.println("皮肤颜色:"+p1.color);
        p1.eat();
        p1.basketball("晚上");
        p1.sleep();
        p1.run("会","有时候");
        person p2=new person();
        System.out.println("*************************************\n");
        p2.name="李四";
        p2.age=18;
        p2.isMale=false;
        p2.color="白";
        System.out.println("姓名:"+p2.name);
        p2.pdan(p2.isMale);
        System.out.println("皮肤颜色:"+p1.color);
        p2.sleep();
        p2.eat();
        p2.makeUp("早上");
        p2.run("会","每天");

    }
}
class person{
    String name;
    int age=1;
    boolean isMale;
    String color;
    public void eat(){
        System.out.println("我会吃饭");
    }
    public void sleep(){
        System.out.println("我会睡觉");
    }
    public void basketball(String time){
        System.out.println("我会打篮球在"+time+"的时候");
    }
    public void makeUp(String time){
        System.out.println("我会化妆在"+time+"的时候");
    }
    public void run(String yse,String day){
        System.out.println("我"+yse+day+"跑步");
    }
    public void pdan(boolean a) {
        if (a==true){
            System.out.println("性别为男");
        }else{
            System.out.println("性别为女");
    }
}

}


设计类

package 对象1;
 /*
 设计类
    属性(成员变量)vs 局部变量
       相同点
         格式:数据类型 变量名=变量值;
         先声明后使用
         都有自己对应的作用域
       不同点
         位置:属性是定义在{}内
              局部变量在方法内,方法体内,代码块内,构造器内,内部的变量
         权限修饰符:属性可以指明其权限
                   局部变量不能使用修饰符,也可以说在定义方法事就已经有权限了
         初始化值:属性整型0,浮点0.0,布尔false,字符型0或/n0000,引用数据类型null
                 局部变量没有初始化值,调用前要赋值,特殊的行参掉用方法时候赋值就可以
         在内存里的位置:属性加载在堆空间里的
                      局部变量在栈空间里的
  */

public class Dom02 {
    public static void main(String[] args){
        man m1=new man();
        m1.age=18;
        System.out.println(m1.age);
        m1.heinht=180;
        System.out.println(m1.heinht);
        m1.name="zhangsan";
        System.out.println(m1.name);
        m1.eat();
        String newname=m1.getName();
        m1.sleap(7);
       int newage =m1.getAge(2);
       System.out.println(newage);
       System.out.println(newname);

    }
}
class man{
    String name;
    int age;
    double heinht;
    public void eat(){
        System.out.println("这个男人会吃饭");
    }
    public void sleap(int time){
        System.out.println("这个男人一天睡觉"+time+"个小时");
    }
    public String getName(){
        return name;
    }
    public int getAge(int add){
        age+=add;
        return age;
    }
}

练习

package 对象1;
/*
练习打印一个m*n的矩形
 */

public class Dom03 {
    public static void main(String[] args){
        Dom03 m=new Dom03();
        System.out.println("该矩形面积为"+m.medhod(10,6));

    }
    public int medhod(int m,int n){
        for (int i=0;i<m;i++){
            for (int j=0;j<n;j++){
                System.out.print("*\t");
            }
            System.out.println("");
        }
        return m*n;
    }
}
package 对象1;
/*
练习:定义Student类,包含三个属性序号(1到20)年级(1到6)成绩(0到100)年级和成绩用随机生成
        问题1:打印3年级学生的信息
        问题2:使用冒泡排序,把学生通过成绩来排名
 */
import array.ArrayUtil;

import java.util.Arrays;
public class Dom04 {
    public static void main(String[] args){
        ArrayUtil arr=new ArrayUtil();
        int[] arr_1=new int[]{1,23,34,23,2,23,23,2};
        System.out.println(arr.max(arr_1));
        System.out.println(arr.min(arr_1));
        System.out.println(arr.sum(arr_1));
        System.out.println(arr.number(arr_1));
        System.out.println(arr.find(arr_1,288));
        Student[] stus=new Student[20];
        for (int i=0;i<stus.length;i++){
            stus[i]=new Student();
            stus[i].number=i+1;
            stus[i].state=(int)(Math.random()*(6-1+1)+1);
            stus[i].score=(int)(Math.random()*(100-0+1)+1);
        }
        for (int i=0;i<stus.length;i++){
            System.out.println("序号:"+stus[i].number+"  年级:"+stus[i].state+"  成绩:"+stus[i].score);
        }
        //问题一
        System.out.println("====================================");
        for (int i=0;i<stus.length;i++){
            if (stus[i].state==3){
                System.out.println("序号:"+stus[i].number+"  年级:"+stus[i].state+"  成绩:"+stus[i].score);
            }
        }
        //问题二
        System.out.println("====================================");
        for (int i=0;i<stus.length-1;i++){
            for (int j=0;j<stus.length-1;j++){
                if (stus[j].score>stus[j+1].score){
                    Student temp=stus[j];
                    stus[j]=stus[j+1];
                    stus[j+1]=temp;
                }
            }
        }
        for (int i=0;i<stus.length;i++){
            System.out.println("序号:"+stus[i].number+"  年级:"+stus[i].state+"  成绩:"+stus[i].score);

        }
    }
}
class Student{
    int number;//序号
    int state;//年级
    int score;//成绩
}

重载

package 对象1;

import java.util.Scanner;
public class Dom05 {
    public static void main(String[] args){
        Dom05 do5=new Dom05();
        Scanner sc=new Scanner(System.in);
        int a= sc.nextInt();
        int b=sc.nextInt();
        String c=sc.next();
        double d=sc.nextDouble();
        do5.one(a);
        do5.one(a,b);
        do5.one(c);
        //2⃣️
        System.out.println(do5.two(a,b));
        System.out.println(do5.two(a,d));
        System.out.println(do5.two(a,b,50));

    }

    //简单重载测试1⃣️
    public void one(int i){
        System.out.println(i*i);
    }
    public void one(int i,int j){
        System.out.println(i*j);
    }
    public void one(String i){
        System.out.println(i);
    }
   // 2⃣️
    public int two(int i,int j){
        return (i>j)?i:j;
    }
    public double two(double a,double b){
        return (a>b)?a:b;
    }
    public int two(int i,int j,int z){
        int max=(i>j)?i:j;
        return (max>z)?max:z;
    }
}

可变形参

package 对象1;
/*
可变形参方法
 */

public class Dom06 {
    public static void main(String[] args){
        Dom06 m6=new Dom06();
        m6.test("zhang");//输出的是地址值说明和数组用法差不多
        m6.test("z","w","z","x","x");
        m6.test("zwz",22,34,45);
    }

    //当参数为一个时候先选择一个的
    public void test(String str){
        System.out.println("one");
    }
    //可以传多个参数
    public void test(String...str){
        System.out.println(str);
    }
    //不能和可变形参构成重载
    //public void test(String[] atr){
    //}
    //报错因为可变形参只能放在最后
    //public void test(int...i,String str){}
    public void test(String str,int...i) {
        System.out.println("放在最后");
    }
    //因为只能放在最后面所以一个方法里只能出现一个可变形参


}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容