Java基础

代码规范

Java程序的文件名与类名必须一致 建议一行只写一条语序 注意代码缩进(按tab直接八个空格) 声明变量的数据类型和变量名(包含数字,字母,下划线,$,不能包含空格,运算符,不能用关键字命名例如public,不能以数字开头) 数据类型转换规则只能由低字节向高字节进行转换,反之则不行{比如int4个字节转换(整数)为double8个字节(小数点后一位)}

配置Java环境

右击“我的电脑”右键“属性”“高级系统设置”“高级”“环境变量” 在系统变量新建“JAVA_HOME”变量值换成JDK的安装路径 在系统变量里新建“CLASSPATH”变量 变量值“.;%JAVA_HOME%\lib” 找到path变量(系统自带的)添加变量“$JAVA_HOME%\bin” 打开运行输入cmd再输入“java_version”

条件运算符

三元运算符,三目运算符,三元表达式

根据不同的条件给同一个变量赋不同的值,变量=条件?值1:值2

(条件是true把值1赋给变量,条件是false则把值2赋给变量)

int num = 1<2?1:0;
System.out.println(num);

输出结果为1

int num = 1>2?1:0;
System.out.println(num);

输出结果为0

int num = 1>2?0:1;
System.out.println(num);

输出结果为1 (与位置无关)

变量

  • 数据类型

  • 变量名

  • 变量值

基本数据类型+引用数据类型

数值类型:byte 1个字节、int 4个字节、short 2个字节、long 8个字节、float 4个字节、double 8个字节

非数值类型:char 2个字节、boolean 1/8个字节

数据类型转换

  • 自动转换

java可以自动对某些数据类型进行自动转换(只能由低字节向高字节转换)

public static void main(String[] args) {
    int num1 = 10;
    double num2 = num1 ;
    System.out.println(num2);
}
//输出结果是10.0 自动转换为double类型
  • 强制类型转换

java无法自动转换的数据类型,开发者可以通过强制手段进行转换(一般来讲强制转换可能会造成精度损失)

public static void main(String[] args) {
    double num1 = 10.5;
    int num2 = (int)num1 ;
    System.out.println(num2);
}
//输出结果是10,强制将double类型的num1转换为int类型

流程控制

if-else

int score = 70;
int integal = 600;//integal代表积分
System.out.println("本次答题得分:"+score);
System.out.println("您的积分:"+integal);
if(score>60 && integal>=500){//短路与计算如果score分数>60则恭喜您中奖了或者就是积分integal>=500
    System.out.println("恭喜您中奖了");
}else{
    System.out.println("很遗憾");
}
if(score>80 && integal>=300){
    System.out.println("恭喜您中奖了");
}else{
    System.out.printl("很遗憾");

输出结果为:恭喜您中奖了

很遗憾

(输出结果有问题,逻辑思路错了,第5行和第10行其实相当于一个或的关系,也可以将第10行改为else if)

int score = 70;
int integal = 600;//integal代表积分
System.out.println("本次答题得分:"+score);
System.out.println("您的积分:"+integal);
if((score>60 && integal>=500)||(score>80 && integal>=300)){//短路与计算如果score分数>60则恭喜您中奖了或者就是积分integal>=500
    System.out.println("恭喜您中奖了");
}else{
    System.out.println("很遗憾");
}

输出结果为:恭喜您中奖了

  • 多重if

173M

173~178L

178XL

  • if后面必须跟条件

  • else后面不能跟条件

  • else后面可以跟括号也可以跟if(else if)

switch-case

与if不同的是,switch-case只能完成等值判断,而无法完成判断大小。

如果是判断两个值是否相等,可以使用switch-case,如果比较两个值的大小关系,则不能使用switch-case。

switch 支持int、short、char、枚举、String类型,不支持boolean类型。

基本语法

switch(变量){
    case 值1:
    //业务代码
    break;
    case 值2:
    //业务代码
    break;
    default;//前面的条件都不成立执行default默认
    //业务代码
    break;
}

case判断变量是否等于某个值,default表示所有的case都不成立的情况下所执行的代码。

1 奖励 2000复合算术运算符

+= , -= ,*=,%=

变量1+=变量2:先求出变量1和变量2之和,再把计算结果赋值给变量1,变量1=变量1+变量2

以此类推

关系运算符

==, !=不等于,>,<,>=,<=

只能用作数字类型作为比较

char cha = 'a';
char cha1 = 'b';
System.out.println(cha != cha1);

== , != 用于非数字类型,输出正确或错误 false or true

int num1 = 10;
int num2 = 11;
boolean flag = num1 >= num2;
System.out.println(flag);

将输出false or true

通常用来作为判段 是 与 非 后面常跟 flag

逻辑运算符

逻辑运算符只能用于boolean类型的数据运算,判断boolean数据之间的逻辑关系,与,或,非

  • 符号代表&(与),|(或),!(非),&&(短路与),||(短路或)
  • 变量1&变量2:只有当变量1和变量2结果都为true时结果才为true,有一个为false则为false变量1|变量2:只要有一个变量为true则结果为true
  • 变量1:若变量1为true,结果为false,若变量1为false,结果为true
  • 变量1&&变量2:只有当变量1和变量2结果都为true时结果才为true,有一个为false则为false
  • 变量1||变量2:只要有一个变量为true则结果为true
短路与 和 与 ,短路或 和 或 区别

短路与:如果检测到变量1为false直接判断false不用再判断变量2

短路或:如果检测到变量1为true直接判段结果为true不用再判断变量2

减少了判断量提高了运算效率

面试经典题

public class Test{
    public static void main(String[]args){
        int num1 = 10;
        int num2 = 11;
        System.out.println((num1++==num2)&(++num1==num2));
        System.out.println(num1);
    }
}

输出结果是false

12

因为num1加完1等于11(num1++==num2)是true而(++num1==num2)的++num1加完1等于12与num2不等为false 所有输出为false

  • 2 奖励 1000

  • 3 奖励 500

  • 否则没有奖励

运算符

  • 复制运算符

数据类型 变量名 = 数值/变量

public static void main(String[] args) {
    //1、创建变量用来记录张三的体重
    double weight1 = 60.5;
    //2、创建变量表示李四的体重
    double weight2 = 70.5;
    System.out.println("交换之前:张三的体重是"+weight1+",李四的体重是"+weight2);
    System.out.println("进行交换");
    double temp;
    temp = weight2;
    weight2 = weight1;
    weight1 = temp;
    System.out.println("交换之后:张三的体重是"+weight1+",李四的体重是"+weight2);
}
  • 算术运算符

    • 基本算术运算符

      +、-、*、/、%、++、--

    • 复合算术运算符

位运算符

  • 十进制和二进制的转换

*十进制转二进制:目标数除以2,若能除尽,该位记做0,若除不尽,该位记做1,再对商继续除以2,以此类推,直到商为0,然后把每一位的结果反序组合就是对应的二进制*。(二进制算法

10:1010

17:10001

*二进制转十进制:从目标数的最后侧起,本位的数值乘以本位的权重,权重就是2的第几位的位数减一次方,将每一位,不同级的值进行相加,得到结果就是十进制。

1010:10

位运算

:&(按位y与),|(按位或),^(按位异或),<<(左移),>>(右移)

变量1&变量2:先转换为二进制,再依次一一对应按与计算,都为1则输出为1。

变量1|变量2:先转换为二进制,再依次一一对应按或计算,有一个为1则输出为1。

变量1^变量2:先转换为二进制,再依次一一对应按异或计算,相同记为0,不同记为1。

变量1<<变量2:变量1乘以2的变量2次方

2<<3:2*8=16

变量1>>变量2:变量1除以2的变量2次方

2>>3:2/8=0

循环

for、while、do-while、foreach

循环四要素:

  • 初始化循环变量

  • 循环条件

  • 循环体

  • 更新循环变量

while

public class Test11 {
    public static void main (String[] args) {
        //初始化循环变量
        int num = 0;
        //循环条件
        while(num < 10) {
            //循环体
            System.out.println("Hello world!");
            //更新循环变量
            num++;
        }
    }
}
public class Test12 {
    public static void main (String[] args) {
        String flag = "y";
        while (flag.equals("y")){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生的学号:");
        int id = scanner.nextInt();
        switch (id){
            case 1:
                System.out.println("张三的成绩是96");
                break;
            case 2:
                System.out.println("李四的成绩是91");
                break;
            case 3:
                System.out.println("王五的成绩是89");
                break;
            default:
                System.out.println("请输入正确的学号");
                break;
        }
        System.out.println("是否继续?y/n");
        flag = scanner.next();
    }
        System.out.println("感谢使用学生成绩查询系统!");
}
    }

do-while

public static void main(String[] args){
    //始化循环变量
    int num = 0;
    do {
        //循环体
        System.out.println("Hello World");
        //更新循环变量
        num++;
        }while(num<10);
        //循环条件
    }
}

while先判断再执行,do-while先执行再判断

for

适用于循环次数确定的情况下

for(初始化循环变量;循环条件;更新循环变量){
    循环体
}
for(int num = 0;num < 10;num++){
    System.out.println("Hello World");
}

while、do-while、for 3种循环的区别

  • 相同点:都遵循循环四要素,初始化循环变量、

循环条件、循环体、更新循环变量。

  • 不同点:

    • while 和 do-while 适用于循环次数不确定的业务场景;for 适用于循环次数确定的场景。

    • while 和 for 都是先判断循环条件,再执行循环体;do-while 先执行循环体,再判断循环条件。

分别使用while、do-while、for 循环输出10以内的所有奇数

for 循环只适用于循环次数确定的场景下 for 也可以适用于循环次数不确定的场景,while 和 do-while 循环次数确定或者不确定都可以使用。

数组

数组就是一种可以存储大量数据类型相同的变量的数据结构,数组就是一个具有相同数据类型的数据集合。

数组中的数据必须是同一种类型的。

数据类型必须完全相同如int类型float类型

数组的基本要素

  • 数组名称

  • 数组元素

  • 元素下标

  • 数据类型

数组本身就是一个变量,数组名称就是变量名,数组中保存的每一个数据都会有一个下标(从0开始)可以快速检索到对应的元素

public class Test14 {
    public static void main (String[] args) {
        //声明数组
        int[] array;
        array = new int[6];
        //给数组赋值
        array[1]=4;
        array[2]=1;
        
        int[] array2 ={1,2};
        int[] array3 = new int[]{1,2};
        // array[2]=10;
        System.out.println("数组中的第二个元素是:"+array[2]);
    }
}
public class Test14 {
    public static void main (String[] args) {
        // int[] array = {1,2,3,4,5,6};
        int[] array = new int[4];
        array[0] = 179;
        array[1] = 182;
        array[2] = 167;
        array[3] = 176;
        double sum = 0;
        for (int i = 0; i < array.length;i++);{
            sum = sum + array[1];
        }
            System.out.println();
        }
    }
public class Test15 {
    public static void main (String[] args) {
        int[] array = new int[100];
        for(int i=0;i< array.length;i++) {
            array[i] = i + 1;
        }
            System.out.println(Arrays.toString(array));
    }
}

数组常见的错误

  • 数据类型不匹配。

  • 边声明边赋值的方式,代码必须写在同一行,不能换行。

  • 数组下标越界。

数组的常用操作及方法

  • 求数组的最大值

  • 求数组的最小值

  • 在数组的指定位置插入数据

  • 对数组进行排序

求最大最小值

public static void main(String[] args) {
   int[] array ={73,80,62,93,96,87};
   int max = array[0];
   int min = array[0];
   for(int i = 1;i < array.length;i++)
   {
        if(array[i]>max)
        {
            max=array[i];
        }
   }
    System.out.println("最大值为:"+max);
    for(int i = 1;i < array.length;i++)
    {
        if(array[i]<min)
        {
            min=array[i];
        }
    }
    System.out.println("最小值为:"+min);
}

在数组的指定位置插入数据

public static void main(String[] args) {
    int[] array = {96, 93, 87, 80, 73, 62};
    //将83插入到数组下标为3的位置
    int num = 83;
    int[] array2 = new int[array.length+1];
    //将原数组中的数据移动到新数组中
    for(int i=0;i<3;i++) {
        array2[i] = array[i];
    }
    for (int i=4;i< array2.length ;i++){
        array2[i]=array[i-1];
    }
    array2[3]=num;
    System.out.println("插入后的数组:"+ Arrays.toString(array2));
}

对数组进行排序

public static void main(String[] args) {
    int[] array = {96, 93, 87, 80, 73, 62};
    //冒泡排序
    for(int i=0;i< array.length-1;i++)
    {
        if(array[i+1]>array[i]) {
            int temp;
            temp = array[i];
            array[i]= array[i+1];
            array[i+1] = temp;
        }
    }
    System.out.println(Arrays.toString(array));
}

关于数组的各种方法

public static void main(String[] args) {
    int[] array = {73,80,62,93,96,87};
    int[] array2 = {73,80,62,93,96,87};
    int[] array3 = {66,55,44,33,22};
    System.out.println(Arrays.toString(array));
    System.out.println(Arrays.equals(array,array2));//equals方法比较两组数组是否相等
    Arrays.sort(array);//sort方法给数组排序
    System.out.println(Arrays.toString(array));//排完序后的结果输出
    Arrays.fill(array2,66);//将66填充进入array数组,将原来数组的值覆盖掉
    System.out.println(Arrays.toString(array2));
    int[] copyarray = Arrays.copyOf(array3,3);//复制数组将数组的值复制长度为3,长度不够就加默认值int类型的默认值为0
    System.out.println(Arrays.toString(copyarray));
    int index =Arrays.binarySearch(array,87);//查找87的位置返回的是下标,使用的是二分查找法必须保证数组是有序的
    System.out.println(index);
}
//toString 方法只能解析一维数组变为字符串

二维数组

二维数组简单理解即一维数组中保存的值是另外一个一维数组

public static void main(String[] args) {
    //声明
    int[] [] array;
    //开辟内存空间
    array = new int[2] [3];
    //        array[0] [0] = 50;
    //        array[0] [1] = 60;
    //        array[0] [2] = 70;
    //        array[1] [0] = 80;
    //        array[1] [1] = 90;
    //        array[1] [2] = 100;
    //        System.out.println(Arrays.toString(array));

    //        int[] item ={50,60,70};
    //        int[] item2 ={80,90,100};
    //        array[0] = item;
    //        array[1] = item2;
    int[][] array2 = {{50,60,70},{80,90,100}};
    String str = "";
    System.out.println(array2.length);
    for(int i=0;i< array2.length;i++){
        str += Arrays.toString(array2[i]);
    }
    System.out.println(str);
}

综合练习

用户管理系统

  • 查询用户:将系统中保存的全部用户信息在控制台打印输出。

  • 添加用户:向系统中添加新的用户信息,如果添加的用户已经存在,给出提示信息。

  • 删除用户:输入用户名,进行删除操作,若输入的用户名不存在,给出提示信息。

  • 账号冻结:输入用户名,进行冻结操作,若输入的用户不存在或者该用户已经被冻结,给出相应提示。

  • 账号解封:输入用户名,进行解封操作,若输入的用户名不存在或者该用户状态正常,给出相应提示。

  • 推出系统:跳出循环,给出提示信息。

package com.bsj;
​
import java.util.Arrays;
import java.util.Scanner;
​
public class Main {
    static String[] names = {"张三", "李四", "王五", "小明"};
    static int[] ages = {22, 23, 20, 22};
    static String[] states = {"正常", "正常", "正常", "正常"};
​
    public static void main (String[] args) {
        //初始化数据
        int num;
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("————欢迎使用用户管理系统————");
            System.out.println("1、查询用户");
            System.out.println("2、添加用户");
            System.out.println("3、删除用户");
            System.out.println("4、账号冻结");
            System.out.println("5、账号解冻");
            System.out.println("6、退出系统");
            System.out.println("请选择:");
            num = scanner.nextInt();
            switch (num) {
                case 1:
                    System.out.println("——————————查询用户——————————");
                    System.out.println("编号\t\t姓名\t\t年龄\t\t状态");
                    for (int i = 0; i < names.length; i++) {
                        if(names[i]!=null) {
                            System.out.println((i + 1) + "\t\t" + names[i] + "\t\t" + ages[i] + "\t\t" + states[i]);
                        }
                    }
                    System.out.println("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 2:
                    System.out.println("——————————添加用户——————————");
                    System.out.println("请输入用户姓名:");
                    String name = scanner.next();
                    boolean flag = nameIsExisit(name);
                    if (flag == true) {
                        System.out.println(name + "已存在,请勿重复添加!");
                    } else {
                        if (names[names.length - 1] != null) {
                            //创建新的数组,并且将老数组的值存入新数组
                            names = Arrays.copyOf(names, names.length + 1);
                            names[names.length - 1] = name;
                            System.out.println("请输入" + name + "的年龄");
                            ages = Arrays.copyOf(ages, ages.length + 1);
                            int age = scanner.nextInt();
                            ages[ages.length - 1] = age;
                            states = Arrays.copyOf(states, states.length + 1);
                            states[states.length - 1] = "正常";
                        }else{
                            int index = getFirstNull();
                            names[index] = name;
                            System.out.println("请输入"+name+"的年龄");
                            int age = scanner.nextInt();
                            ages[index] = age;
                            states[index] = "正常";
                        }
                        System.out.println(name + "添加成功!");
                    }
//                    if (names[names.length - 1] != null) {
//                        System.out.println("数据已经填满,新用户无法加入!");
//                    } else {
//                        System.out.println("请输入用户姓名:");
//                        String name = scanner.next();
//                        boolean flag = nameIsExisit(name);
//                        if (flag == true){
//                            System.out.println(name+"名字已存在,请勿重复添加!");
//                        }else{
//                            names[names.length-1] = name;
//                            System.out.println("请输入"+name+"的年龄");
//                            int age = scanner.nextInt();
//                            ages[ages.length-1] = age;
//                            states[states.length-1] = "正常";
//                            System.out.println(name+"添加成功!");
//                        }
//                    }
                    System.out.println("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 3:
                    if (names[0] == null) {
                        System.out.println("用户已全部删除!");
                    } else {
                        System.out.println("——————————删除用户——————————");
                        System.out.println("请输入用户名:");
                        name = scanner.next();
                        if (nameIsExisit(name)) {    //判断用户是否存在
                            int index = getIndex(name);
                            if (index>=0){
                                for (int i=index;i< names.length-1;i++){
                                    names[i] = names[i+1];
                                    ages[i] = ages[i+1];
                                    states[i] = states[i+1];
                                }
                                names[names.length-1] = null;
                                ages[ages.length-1] = 0;
                                states[states.length-1] = null;
                            }
                        } else {
                            System.out.println("您输入的用户不存在!");
                        }
                    }
                    System.out.println("删除完成!");
                    System.out.println("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 4:
                    System.out.println("——————————账号冻结——————————");
                    System.out.println("请输入用户名:");
                    name = scanner.next();
                    if(nameIsExisit(name)){
                        int index = getIndex(name);
                        String state = states[index];
                        if (state.equals("冻结")){
                            System.out.println(name+"账号已经被冻结,请勿重复操作!");
                        }else{
                            states[index] = "冻结";
                            System.out.println(name+"冻结成功!");
                        }
                    }else{
                        System.out.println("输入的用户信息不存在!");
                    }
                    System.out.println("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 5:
                    System.out.println("——————————账号解冻——————————");
                    System.out.println("请输入用户名:");
                    name = scanner.next();
                    if(nameIsExisit(name)){
                        int index = getIndex(name);
                        String state = states[index];
                        if (state.equals("正常")){
                            System.out.println(name+"账号状态已为正常,请勿重复操作!");
                        }else{
                            states[index] = "正常";
                            System.out.println(name+"解冻成功!");
                        }
                    }else{
                        System.out.println("输入的用户信息不存在!");
                    }
                    System.out.println("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 6:
                    System.out.println("感谢使用本系统,再见!");
                    break;
            }
        } while (num != 6);
    }
​
    /**
     * 判断用户输入的姓名是否已经存在与数组中
     */
    public static boolean nameIsExisit (String name) {
        for (int i = 0; i < names.length; i++) {
            if (name.equals(names[i])) {
                return true;
            }
        }
        return false;
    }
​
    /**
     * 找到名字在数组中的下标
     */
    public static int getIndex (String name) {
        for (int i = 0; i < names.length; i++) {
            if (name.equals(names[i])) {
                return i;
            }
        }
        return -1;
    }
​
    /**
     * 找到数组中第一个为空的下标
     */
    public static int getFirstNull(){
        for (int i = 0;i< names.length;i++){
            if (names[i]==null){
                return i;
            }
        }
        return -1;
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JavaBsj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值