华清远见重庆中心—后端基础阶段技术总结/个人总结

一、Java基础知识

一、概述

  • Java是1995年Sun公司发布,如今被Oracle收购

  • 下载安装Java时从Oracle官网下载,最好下载LTS长期维护版本。

  • Java8,Java11,Java17

  • Java是一门半编译半解释的面向对象语言

  • 由于Java虚拟机JVM的存在,可以全平台运行。

1、Java历史

  • Oak(橡树)语言,由Green开发团队开发,主要用于微型嵌入式设备编程,第一次提出了开源协议

  • Java之父 詹姆斯.高斯林

  • 经历过Sun公司接手之后,最终由Oracle收购,1995年语言更名为Java,正式发布JDK1.0

2、Java的分类

  • 1996年 Java(此时JDK1.2)应对发展需求,分为三个重要方向:

  1. J2SE: Java标准语法(这是学习Java开发体系的必备基础)

  1. J2ME: 微型嵌入式领域的编程(例如:塞班系统应用,但后来并没有普及)

  1. J2EE: 企业级开发(使用Java语言开发服务器)

3、JDK安装

  1. 进入JDK的官网 :https://www.oracle.com/

  1. 搜索框输入java

  1. 找到JDK11 的下载地址

  1. 选中对应的系统以及下载版本 (如果没有Oracle账户需要注册)

  1. 阿里云网盘下载:jdk-11.0.18_windows-x64_bin.exehttps://www.aliyundrive.com/s/FGCFrS1HeW3提取码: 5nl4

  1. 下载完成后直接安装

  1. 安装后,在控制台查看是否安装成功(不会安装的可以自行搜教程!)

WIN + R 键启动运行窗口

  1. 在命令提示符窗口中输入java -version

说明已经安装成功了

4、JDK卸载

1、在windows搜索中,找到控制面板

  1. 双击打开控制面板,在右上角启用类别,选择程序中的卸载程序选项

3、在卸载程序页面中查看需要卸载的JDK文件,并双击

  1. 卸载完成后可以查看安装路径,是否卸载干净。

5、IDEA下载

6、认识JetBrains

1、官网:JetBrains: 软件开发者和团队的必备工具

2、目前在世界上的主流开发软件:IDEA、WebStorm、PyCharm

3、特点:

  1. 智能的代码提示功能(就像我们使用的输入法)

  1. 最新的开发支持(github、框架、辅助插件、代码测试...)

  1. 代码的自动保存(不需要程序员频繁Ctrl + S)

7、安装IDEA

1、下载最新版本的idea:IntelliJ IDEA – 领先的 Java 和 Kotlin IDE (jetbrains.com.cn)

2、下载完成后,直接安装IDEA即可。

  1. IDEA环境认识

1、顶部

File

点击File后会打开菜单

  • New :新建内容(文件、文件夹、项目等)

  • Open :打开指定文件或者指定的目录

  • Open Recent:打开最近打开过的文件或者目录

  • Close Project:关闭当前项目窗口

  • Settings:设置整个IDEA的环境

  • Project Structure:设置项目

  • SaveAll:保存所有内容

  • Exit 退出IDEA

View

查看IDEA环境中的视图设置

Code

对Code进行分析和管理

Refactor

对文件进行重命名、移动、复制

Build

对文件进行构建

Run

运行文件 或者 开启DEBUG模式

Tools

内部或者外部工具的使用

Git

对代码进行git分布式管理

Window

窗口工具

Help

帮助

2、底部

TODO:展示需要去做的任务

Problems:项目中出现的问题

Git:分布式托管

Terminal:控制台

Profiler:性能测试平台

Run:运行后的结果展示

二、JDK

  • JDK 全称是 Java Development Kits 的缩写,翻译过来为Java开发工具包

  • 在JDK中有运行.java文件的虚拟机(解释器)

知识点:

1、java的源文件 开发文件是以什么方式结尾 .java

2、虚拟机 解析.java文件

我们接下来一一解答以下问题:

1、什么是虚拟机

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

比如:我们在电脑中用的手机模拟器,就是一个由软件模拟的虚拟机

在Java中的虚拟机,是指的专门为了解析.java文件存在的一种软件

虚拟机,英文为 Virtual Machine,而Java虚拟机被人成为JVM(即Java Virtual Machine)

2、JDK中除了虚拟机还有哪些内容

JRE:  Java Runtime Envirment (Java运行时环境 ,运行.java文件的核心内容)

JDK: 包含JRE,JRE中有JVM。

3、虚拟机运行.java文件的原理

  • Java11 之前

java命令:将.java文件编译成.class文件(这里的.class为字节码文件,机器是无法识别的)

javac命令:将.class文件解释成对应的二进制命令。

  • Java11 后

java命令:将.java文件直接解释成对应的二进制命令

所以我们既可以说Java是一门编译解释语言,也可以说是一门解释语言。

(区别与编译语言)

4、什么是解释型语言

首先要了解两个概念:编译语言解释语言

1、编译语言是指定文件,编译到指定位置,生成指定的二进制文件,特点:效率高、速度快 (C语言)

2、解释语言是指定文件,解释到任何位置,生成指定的二进制文件,特点:跨平台性好

三、第一个Java程序

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}  

四、Java程序的运行流程

编辑.java源文件——javac命令编译——》生产.class文件——》java命令由JVM解释运行

五、Java程序中的注意事项

  • 要写代码,必须想创建class,class称为类,是一个java程序的基本组成单位

  • 每个能够运行的java程序,有且只有一个main方法,称为主方法/入口函数,是程序的启动

符号

  • Java中的符号全部都是英文状态下的符号,可以在输入法中设置中文状态使用英文标点

  • “{}”必须成对出现。用于定义类、定义方法和定义代码块

  • “[]”必须成对出现。用于定义数组、使用数组

  • “()”必须成对出现。用于表示方法的参数

  • “空格”用于分割关键字和代码。可以是一个空格,也可以是多个

  • “.”用于调用某个类或对象的属性和方法

  • “;”用于表示一句代码的结束,大括号后不需要加分号

换行和缩进

  • 在每出现一次大括号时,就要进行一次缩进

六、Java程序中的注释

注释可以对代码进行解释说明或屏蔽不用的代码。 编译时无视注释,注释分为

  • 单行注释 快捷键:ctrl + /

//Hello World
  • 多行注释 快捷键:ctrl + shift + /

/*
Hello World
Hello World1
Hello World2
*/
  • 文档注释

/**
 * 文档注释
 * 通常用于解释整个java类或某个方法或某个变量,
 * 最终可以通过java命令自动生成文档
 */

七、IDEA快捷键

ctrl+X 删除一行

ctrl+shift+f10 运行

ctrl+shift+方向键 移动选中的代码块

变量.sout 回车 快捷输出

ctrl+alt+L 调格式

条件 . if 快速生成if

IDEA在粘贴多行字符时自动转义符换行加拼接

八、Java语言的命名规则

  • 驼峰命名法

如果用多个单词描述一个内容,除首字母外,其他单纯首字母大写。

如studentsName、empId

  • 帕斯卡命名法

使用单词首字母去全部大写

九、Java中的标识符

Java中的英文、方法名和变量名称统称为标识符。

  • 类名使用帕斯卡命名法

  • 方法名和变量名使用驼峰命名法

  • 命名时做到“见名知意”

十、Java中标识符的命名规则

  • 标识符使用字母、数字、下划线和$组成

  • 不能以数字开头

  • 不能使用Java中的关键字(保留字)

例如:

  • 类名 Test Person Animal Cat UserController StudentService

  • 变量名 age lastName firstName

  • 方法名 login() findEmpById(int id)

  • 常量 COUNTRY_NAME

十一、Java数据类型

1、基本数据类型

  • 数值类型:byte short int long float double

  • 字符类型:char

  • 布尔值类型:boolean (true,false)

  • 注:String不是基本数据类型,是引用数据类型

  1. 基本数据类型的表示方式
2、引用数据类型

十二、转义字符

\t
\n 换行
\"
\'
\b 退格
\r 回车
\\ 字符“\”
\0 null

十三、运算符优先级

十四、原始类型之间的数据类型转换

  • 隐式类型转换(自动)

  • 整型数据可以直接保存到浮点型中

占用字节小的数据类型的变量,可以直接保持到占用字节大数据类型的变量中

short s=123;
int i=s;
  • 显示类型转换

占用字节大的数据类型的变量,默认无法保持到占用字节小的数据类型的变量中,

如果要强制保存,需要强制类型转换。

语法:(目标类型)带转换的变量

int number=123;
byte a=(byte)number;//未超出范围,结果无误
byte a=(byte)128;//超出范围,溢出-128

十五、引用类型

  • 接口

  • 数组

十六、变量

  1. 变量

  • 在内存中的一块区域。由于这块区域终端数据可以发送变化,所以称为变量。

  • 内存中的变量,相当于酒店中的房间。房间的类型就是变量的类型,房间的房号就是变量的名称,房间中住的人就是变量的值。

  • 定义变量,就是在内存中申请一块想要数据类型的空间,并对其命名的过程。

  1. 定义变量

  • 语法:数据类型 变量名;

  • 如果要同时定义多个相同类型的变量,可以: 数据类型 变量名1, 变量名2.。。;

例如:

//年龄
int age=18;
//年月日
int year;
int month;
int day;
//利率
double interestRate;
//电话号码
String phoneNumber;
  1. 变量赋值

语法:变量名 = 值

int i;
i=10;
  1. 变量初始化

  • 语法:数据类型 变量名 = 值;

  • 如果在定义变量的时候能确定其中保存的数据,可以直接在定义变量的时候赋值。

  • 将定义变量和给变量赋值

int i =0;
  1. 变量注意事项

  • 在一对大括号中变量只能出现一次

  • 给变量赋值是,赋值符号“=”左边通常是一个变量名,右边可以是一个具体值也可以是另一个赋了值的变量名(不超出其范围),再可以是一个表达式(不超出其范围)。

  • 如果同时定义多个类型系统的变量,可以只写一个数据类型

  • 必须以字母、下划线、或者美元符$开头;以美元符$ 开头命名的变量虽然能够编译通过但是不建议使用;

  • 中文也可以作为命名开头且编译也能通过,但是不建议使用。

  • 除开头外后面的部分可以有字母、下划线、美元符$以及数字组成;

  • 虽然变量名不限制长度,但能表达清楚命名的含义即可;

  • 变量名不可以和java的关键字冲突;

  • 再命名中大小写是又区别的,即使由同一个单词命名但是有个别字母的大小写的区别,产生的就是两个不同的变量。

int a=1,b=2,c=3;

十七、运算符

算术运算符

需要两个操作数参与,如果由浮点数参与运算,结果为浮点型。

符号

作用

说明

+

如果两个操作数都是数值型的数据,+用于计算。如果两个操作数有一端是字符串,+用于拼接字符串。

-

只能用于数值型数据。

*

只能用于数值型数据。

/

只能用于数值型数据。如果两个整数相除,结果只保留整数部分(商)。

%

模(取余)

只能用于数值型数据。商一定是整数。

注意

  • 如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除,后加减

  • 运算时最终结果的数据类型,以所以参与运算的操作数中所占字节最大的类型为准

关系运算符

需要两个操作数参与

符号

作用

>

大于

<

小于

>=

大于等于

<=

小于等于

!=

不等于

==

等于

注意

  • ==用于判断相等,=用于赋值

  • ==用于比较两个原始类型的值或引用类型的内存地址

  • 关系运算的结果为true/false

逻辑运算符

符号

作用

说明

&&

and与

符号两端需要两个表达式,判断如果都为true,整体结果则为true,如果有一段姐夫哦为false整体结果为false。

||

or或

符号垄断需要两个表达式,判断如果都为false,整体结果则为false,如果有一端结果为true,整体结果为true。

!

not非

是一个弹幕运算符,只有一个表达式参与运算。“!表达式”不是对原表达式的结果取相反值。

补充:位运算符

符号

作用

&

按位与。计算的结果与&&相同,但过程不同。符号两端的表示都会执行判断。

|

按位或。计算的结果与||相同,但过程不同。符号两端的不是都会执行判断。

^

按位异或。将操作数转换为二进制后,按位比较,如果相同结果为0,不同结果为1,最终二进制结果转换为十进制。

>>

按位右移。将第一个操作数转换为二进制后,向右移第二个这才是对于的位数,再将结果装换位十进制。

<<

按位左移。

赋值和复合赋值运算符

符号

作用

=

赋值运算符。将符号右侧的内容赋值给符号左侧的变量。

+=

复合赋值运算符。i+=3;相当于i=i+3;

-=

i-=1; ==

*=

/=

%=

注意

复合赋值运算的流程是:

将符号两端的整体进行对应的算数运算后,将结果赋值给符号左侧的变量中。

自增自减运算符

只有一个操作数参与运算,称为单目运算符

符号

作用

++

将结果加一

将结果减一

注意

a++或++a相当于a+=1或a=a+1。–同理

如果++或–独立成行使用,无论符号在前在后,都将结果+1或-1

如果++或–不是单独成行

符号在前,先+1或-1计算后在使用值

符号在后,先使用值后在+1或–1计算

条件运算符

三目运算符,有三个操作数参与。是一个简化版的双分支条件语句。

表达式1?表达式2:表达式3

首先运算表达式1,如果结果为true,执行问号后的表达式2; 如果结果为false,执行冒号后的表达式3。 整个表达式的最终结果为表达式2或表达3。

十八、条件语句

if语句

  • 单分支if语句

如果一件事情满足则执行

if(判断条件){//布尔值
    执行代码
}
  • 双分支(if...else)

if(){

}else{

}
  • 多分支if...else if....else

if(){

}else if(){

}else if(){

}else{

}
  • if嵌套

if(){
    if(){
    
    }
}

switch语句

如果一个变量的值能够列举出时,使用switch语句更为简洁。

switch(变量){
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    default:
        break;
}            

注意:

1、switch括号中一般是变量,变量需要指定特殊的数据类型(byte short int char String(Character))

2、switch不可以设置的类型有:long,double,float

3、有无break的情况(break 跳出(停止)switch语句),没有break情况,程序会继续往后执行。

4、关于if语句与switch的区别:switch不能判断范围条件.

5、default 除了case之外的其他条件,(default为了程序健壮性)

十九、循环

while

while(循环条件){//小括号中的条件结果为boolean值
满足循环条件时重复执行的代码
}

执行流程 先执行小括号中的内容,如果结果为true,执行大括号中的内容,再循环执行小括号中的内容,判断如 果为false则停止循环。

while循环有可能一次都不执行。

do-while

do{
满足循环条件时重复执行的代码
}while(循环条件);

执行流程 先执行一次do大括号中的内容,再判断while小括号中的内容,如果成立,再次执行do大括号中的内 容,如果不成立,停止循环。

do-while循环至少执行一次

for

//表达式1为定义循环变量
//表达式2为判断循环条件
//表达式3为更新循环变量
for(表达式1;表达式2;表达式3){
循环体
}

执行流程 首先执行表达式1,再执行表达式2,如果表达式2的结果为true,执行循环体,再执行表达式3,再执行 表达式2判断,如果表达式2的结果为false,结束循环

for循环特殊情况

//for循环特殊情况
//可以使用外部定义的循环变量
int i = 0;
for (;i<=10;i += 2) {
System.out.println(i);
}
//可以在循环体重更新循环变量
int i = 0;
for (;i<=10;) {
System.out.println(i);
i += 2;
}
//两个分号必不可少,如果都不写表达式,是一个死循环
int i = 0;
for (; ; ) {
if (i > 10) {
break;
}
System.out.println(i);
i += 2;
}

break

  • break是停止循环后,继续执行循环之外的内容。

continue

在循环语句中,使用continue,可以停止本次循环,不再执行continue之后的代码,直接进行下一次循环。

循环总结

  • 如果已知循环次数,推荐使用for循环。如遍历数组、集合等。

  • 如果未知循环次数,推荐使用while循环。 while循环和for循环可以相互转换

  • do-while循环至少执行一次,for循环和while循环有可能一次都不执行

循环嵌套

如果一个重复的过程还需要将其整体重复执行时,可以使用循环嵌套。

如循环判断密码是否输入正确,正确后循环打印功能菜单。

循环嵌套就是循环一个循环。

//用*打印矩形
//将循环一行这件事再循环5次
for (int n = 1; n <= 5; n++) {
//循环打印一行
for (int i = 1; i <= 10; i++) {
System.out.print("*");
}
System.out.println();
}

二十、数组

1、概念

一组类型相同的数据的有序集合。

2、定义

1、简单定:义将一类数据方到一个整体中

2、专业定义:将数据类型相同的数据,放到一个集合中

3、数组的定义方式

  1. 静态初始化 :在构建数组时就给予初始化的值

数组类型: 数据类型[]、变量[]

数组初始化 {数组元素,数组元素,....}

int[] a = {1,2,3};//1、数组有3个元素长度 2,里面的元素有哪些
int b[] = {1,2,3};
2.动态初始化:先构建数组的对象,然后在逐一赋值初始化

基本格式: 数据类型[] 变量名 = new 数据类型[数组的长度]

int[] c = new int[3];//1、数组有多长

注意:数组的类型决定了元素是什么样的类型

3.定义数组的同时初始化

语法:数据类型[] = new 数据类型[数据大小];

double[] = new double[10];

4、数组元素

int[] a = {1,2,3};
//取出指定的数组元素:
// 数组元素都具有下标值,下标值从0开始
// 例如:数组a下标为1的元素是”2“
// 通过”数组变量[下标值]“将数组元素取出
System.out.println(a[1]);

//取不到”下标不存在“的值,报运行错误.
System.out.println(a[4]);
可以通过循环给数组赋值和读取元素
//定义一个数组保存同学的姓名,循环接收后打印所有。
Scanner sc = new Scanner(System.in);
//定义数组
String[] stuName = new String[3];
//循环赋值
for (int i = 0; i < 3; i++) {
System.out.println("请输入第"+(i+1)+"位同学的姓名");
stuName[i] = sc.next();
}
//循环读取
System.out.println("当前学生列表");
for (int i = 0; i < stuName.length; i++) {//通过“数组名.length”获取数组的长度
System.out.print(stuName[i]+"\t");
}
//增强for循环 for(数据类型 变量名 : 数组或集合){}
for (String name : stuName) {
System.out.print(name + "\t");
}
System.out.println()

对指定下标的数组元素赋值,可以直接修改该数组

int[] a = {1,2,3};
a[1] = 4;

5、遍历数组

1、可以通过length这个属性(变量)获取数组的长度

int[] a = {1,2,3};
for(int i = 0; i < a.length; i++ ){//0~2
    System.out.println(a[i]);
}
//取出数组中的最后一个元素
System.out.println(a[a.length - 1]);

2、将数组内容全部输出到打印语句

// 工具类 Arrays (java.util.Arrays)
System.out.println(Arrays.toString(a));

题目:

控制输入对应的n值,创建一个n长度的随机数数组

数组元素不能重复

public static void main(String[] args) {

        int[] rands = new int[20];
        for(int i = 1; i <= 20; i++){
            rands[i - 1] = i;
        }

        int[] arr = new int[10];
        for(int i = 0; i < arr.length; i++){
            //随机下标
            int n = (int)(Math.random() * rands.length);
            if(rands[n] != 0){
                arr[i] = rands[n];
                rands[n] = 0;
            }else{
                i--;
            }
        }
        System.out.println(Arrays.toString(arr));
    }

}

6、数组复制

public static void main(String[] args) {

        int[] a = {1,2,3,4,5,6};

        //问:如实现数组复制 从哪里开始复制(start),到哪里停止复制(end)
        //   数组 ===> 新的数组 (数组长度要确认) length = end - start + 1
        int start = 2;
        int end = 3;
        int[] b = new int[end-start+1];

        int m = 0;//b数组的下标
        for(int i = 0; i < a.length; i++){
            if(i >= start && i <= end){
                b[m] = a[i];
                m++;
            }
        }
        System.out.println(Arrays.toString(b));

数组复制 System.arraycopy

System.arraycopy(src,srcPos,dest,destPos,length)

src : 被复制的数组(从哪个数组复制)

srcPos : 从src的哪个下标开始复制

dest : 粘贴到的数组

destPos : 从dest的哪个下标开始粘贴

length : 复制的数据元素的长度

int[] c = {7,8,9,10,11,12};
System.arraycopy(a,2,c,2,2);
System.out.println("c数组:" + Arrays.toString(c));
System.out.println("a数组:" + Arrays.toString(a));

问:如果要将一个数组完整的复制给另一个数组

 public static void main(String[] args) {
    int[] a = {1,2,3,4,5,6};
    int[] c = {7,8,9,10,11,12};
System.arraycopy(a,0,c,0,a.length);

7、数组扩容

注意:数组本身在定义之后,不可以增减长度

public static void main(String[] args) {
//注意:数组本身在定义之后,不可以增减长度
    int[] a = {1,2,3};
    //在a数组中添加一个为4的元素
    //System.arraycopy
    int[] b = new int[a.length + 1];
    System.arraycopy(a,0,b,0,a.length);
    b[3] = 4;
    System.out.println(Arrays.toString(b));

    a = b; //引用地址的赋值。
//double[] c = new double[3];
//c = a;//数组能够赋值,是因为有相同的数组类型,类型不同就不能相互赋值。
    System.out.println(Arrays.toString(a));

数组阔容的办法

Arrays.copyOf(src,length)

src:需要扩容的数组

length:扩容的长度

int[] c = {1,2,3};
c = Arrays.copyOf(c,4);
c = Arrays.copyOf(c,2);
System.out.println(Arrays.toString(c));

//比较地址是不是同一个
System.out.println(c == Arrays.copyOf(c,2));

8、冒泡排序

数组中每相邻的两个元素进行比较,如果不满足排序的规则,交换位置。

int[] num = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        //长度-1轮
        for (int i = 0; i < num.length - 1; i++) {
            //一轮交换12次
            for (int i1 = 0; i1 < num.length - 1; i1++) {
                //交换
                int tem = 0;
                if (num[i1] > num[i1 + 1]) {
                    tem = num[i1 + 1];
                    num[i1 + 1] = num[i1];
                    num[i1] = tem;
                }
            }
            //输出
            System.out.print((i + 1) + "轮");
            for (int a : num) {
                System.out.print(a + " ");
            }
            //每轮换行
            System.out.println();
        }

9、生成一个20长度的随机数数组 分成一个奇数数组 偶数数组

方式一:使用扩容方式实现奇偶数组分离

public static void main(String[] args) {
for(int i = 0; i < a.length; i++){
    if(a[i] % 2 == 0){//偶数
    even = Arrays.copyOf(even,even.length + 1);
    even[even.length - 1] = a[i];
    }else{//奇数
    odd = Arrays.copyOf(odd,odd.length + 1);
    odd[odd.length - 1] = a[i];
    }
}
System.out.println("偶数数组:" + Arrays.toString(even));
System.out.println("奇数数组:" + Arrays.toString(odd));

方式二:特殊的排序方式

public static void main(String[] args) {
    for(int j = 0; j < a.length - 1; j++){
        for(int i = 0; i < a.length - 1; i++){
            if(a[i] % 2 == 0 && a[i+1] % 2 == 1){
                int tmp;
                tmp = a[i];
                a[i] = a[i+1];
                a[i+1] = tmp;
           }
        }
      }
        System.out.println(Arrays.toString(a));
System.out.println("偶数数组:" + Arrays.toString(even));
System.out.println("奇数数组:" + Arrays.toString(odd));

10、排序函数

public static void main(String[] args) {
        int[] a = {5,4,3,2,1};
        Arrays.sort(a);//从小到大的排序
        System.out.println(Arrays.toString(a));
    }

11、问题 ["红","蓝","绿","蓝","红","绿"] 按照:' 绿 < 蓝 < 红 '的规则排序

public static void main(String[] args) {
        //问题 ["红","蓝","绿","蓝","红","绿"]
        // 按照:' 绿 < 蓝 < 红 '的规则排序
        String[] b = {"红","蓝","绿","蓝","红","绿"};

        for(int j = 0; j < b.length - 1; j++){
            for(int i = 0; i < b.length - 1; i++){
                if(b[i] == "蓝" && b[i+1] == "绿" || b[i] == "红" && b[i+1] == "蓝"|| b[i] == "红" && b[i+1] == "绿" ){
                    String tmp;
                    tmp = b[i];
                    b[i] = b[i+1];
                    b[i+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(b));

12、打印如下菜单

请选择功能:
1:注册
2:登录
3:退出
输入:1
进入注册功能
 /**
   * 请选择功能:
   * 1:注册
   * 2:登录
   * 3:退出
   * 输入:1
   * 进入注册功能
   */
        System.out.println("请选择功能:\n" +
                "1:注册\n" +
                "2:登录\n" +
                "3:退出\n");
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            switch (a){
                case 1:
                    System.out.println("进入注册界面");
                    break;
                case 2:
                    System.out.println("进入登录页面");
                    break;
                case 3:
                    System.out.println("您已退出");
                    break;
            }

13、有一排学生,按照(1-100)分别给与编码.现在从1开始报数,叫到7的同学被踢出队列然后继续报数,直到最后一个同学(求最后一个同学的编号)

 public static void main(String[] args) {
        //对学生进行编号
        int[] student = new int[100];
        for (int i = 0; i < student.length; i++) {
            student[i] = i + 1;
        }
        //System.out.println(Arrays.toString(student));

        int num = 100;
        int count = 1;
        while (num > 1) {
            for (int i = 0; i < 100; i++) {
                if (student[i] == 0) {//3
                    continue;
                }
                 //当遍历到7时,把7换成0,然后整个数num-1
                if (count % 7 == 0) { //2
                    student[i] = 0;
                    num--;
                }
                count++;//1
            }
        }
        for (int i = 0; i < student.length; i++) {
            if (student[i] != 0) {
                System.out.println("剩余的那个人原来的位置时" + student[i]);
                System.out.println(Arrays.toString(student));
            }
        }
    }

14、打印出杨辉三角

public static void main(String[] args) {
        Scanner scann = new Scanner(System.in);
        System.out.println("请输入杨辉三角的层数:");
        int n = scann.nextInt();
        int[][] arr = new int[n][n];
        for (int i = 0;i < n;i++){
            for (int j = 0;j <=i;j++){
                if (j == 0 || j == i){
                    arr[i][j] = 1;
                    System.out.print(1+"\t");
                }else{
                    arr[i][j] = arr[i-1][j] + arr[i-1][j+1];
                    System.out.print(arr[i][j] + "\t");
                }
            }
            System.out.println();
        }
    }

15、实现数组的翻转{1,2,3,4}——>{4,3,2,1}

public static void main(String[] args) {
        int[] a = {1,2,3,4};
        int temp = 0;
        for (int start = 0,end = a.length - 1;start < end;start++,end--){
            temp = a[start];
            a[start] = a[end];
            a[end] = temp;
        }
            System.out.println(Arrays.toString(a));

    }

16、分解质因数 (质数:只能被1或者自身整除的数)

 public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int x = scan.nextInt();
        System.out.print(x + " = ");
        int i = 2;      //1不是质数
        while (true){
            if (x == i){
                System.out.println(i);//如果相等的话,就说明这个数没有因数,只有1和它本身
                break;
            } else if (x % i == 0) {
                System.out.print(i + " x ");
                x = x / i;
            }else {
                i++;
            }
        }
    }

17、判断输入的数是不是回文数

 public static void main(String[] args) {
        // 2、回文数(1000以内的所有回文数)
        //    *  回文数:数值对称 11 121 131 11211
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个需要判断是不是回文数的数:");
        int x = scan.nextInt();
        //定义临时变量存输入的数
        int input_num = x;
        //定义一个变量存倒转的数
        int dao_num = 0;
        while (x != 0){
            int num = x % 10;//取输入的整数的个位、十位、百位......
            x = x / 10;   //更新x的值
            dao_num = dao_num *10 + num;  //记录倒转过来的数
        }
        if (dao_num == input_num){
            System.out.println(input_num+"是一个回文数!");
        }else {
            System.out.println(input_num+"不是一个回文数!");
        }
    }

18、水仙花数(求1000以内的所有水仙花数)

public static void main(String[] args) {
        //3、水仙花数(求1000以内的所有水仙花数)
        int ge,shi,bai,count = 0;
        for (int i = 100;i <1000;i++){
            ge = i % 10;
            shi = i /10 %10;
            bai = i / 100 % 10;
            if (ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
                System.out.println(i);
                count++;
            }
        }
        System.out.println("1000以内的所有水仙花总数为:"+count);
    }

19、ATM机程序

public static void main(String[] args) {
//                   4、ATM机程序
//                * 要求:1)进入程序时,提示功能选项 取款 存款 查询 退出
//                *      2)模拟完成存款、取款、查询功能
//                *      3)用户只要不退出就能一直操作
        Scanner scan = new Scanner(System.in);
        int count = 0;//存款
        boolean exit = true;
        while (exit){
            System.out.println("*************ATM************");
            System.out.println("请输入要选择的功能序号");
            System.out.println("1、取款  2、存款  3、查询  4、退出");
            System.out.println("****************************");
            int function = scan.nextInt();
            switch (function){
                case 1:
                    //取款
                    System.out.println("请输入取款金额:");
                    int Withdrawal = scan.nextInt();//取款
                    if (count<100){
                        System.out.println("账户余额不足!");
                        System.out.println("取款失败!!");
                    }else {
                        count = count - Withdrawal;
                        System.out.println("取款成功!");
                    }
                    break;


                case 2:
                    System.out.println("请输入存放的金额数:");
                    int deposit = scan.nextInt();
                    if (deposit<100){
                        System.out.println("请存入面值最少100的人民币!");
                        System.out.println("存款失败!请重新存放");
                    }else {
                        count = count + deposit;
                        System.out.println("存款成功!");
                    }
                    break;

                case 3:
                    System.out.println("账户余额为:"+count+"元");
                    break;

                case 4:
                    exit = false;
                    System.out.println("谢谢您的使用!");
                    break;
                default:
                    System.out.println("选择的功能序号错误!请重新输入!");
                    break;
        }
        }

    }

20、抛小球

以一个高度抛出小球,小球弹起高度的一半后,再次下落 当小球弹了n次,它距离地面的距离为多少。

public static void main(String[] args) {
//        5、抛小球
//                *   以一个高度抛出小球,小球弹起高度的一半后,再次下落
//                *   当小球弹了n次,它距离地面的距离为多少。
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入小球的初始下落高度(米):");
        double height = scan.nextDouble();
        System.out.println("请输入小球弹的次数:");
        int n = scan.nextInt();
        double sum = 0;
        int count = n;
        for (;n>0;n--){
            sum += height;
            sum += height = height /2;//解决历程问题
        }
        System.out.println("当小球弹了"+count+"次时,"+"它距离地面:"+height+"米"+"经过了"+sum+"米");
    }

【本阶段企业常见面试题】

  1. 在JAVA中,如何跳出当前多重嵌套循环?

方式一:通过break标签跳出多重循环

Java定义的标签一定要紧跟在循环前

同时标签名后是冒号:

loop1:
    for(int i = 0;i < 10;i++){
        loop2:
            for(int j = 0;j < 10;j++){
                if(/*某些条件*/){
                    break loop1;
                }
//其他代码
  }
}  

方式二:break跳出

for(int i = 0;i < 10;i++){
    for(int j = 0;j < 10;j++){
        if(/*某些条件*/){
            break;
        }
//其他代码
    }
}
  1. JDK和JRE有什么区别?

JRE是java运行时环境,而JDK是java开发工具包,JDK包含JRE,但是JRE可以独立安装。

JDK:java development kit (java开发工具),JDK 是用于开发 Java 程序的最小环境。

JRE:java runtime environment (java运行时环境),是提供给 Java 程序运行的最小环境。

JRE包含了java虚拟机、java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。JDK是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。运行java程序只需安装JRE。如果需要编写java程序,需要安装JDK

  1. =、==、和equls的区别

a、=和equals ==的区别

=表示的是赋值,即将=右边的值赋给左边的变量。equals和==是表示操作

b、==和equals ==的区别

1. ==是运算符

2. equals是String对象的方法

一般有两种类型的比较

1. 基本数据类型的比较

2. 引用对象的比较

1. 基本数据类型的比较

==和equals都比较的是值是否相等,相等则为true,否则为false

2. 引用对象的比较

==和equals都是比较是栈内存中的地址是否相等,相等则为true,否则为false

注意

1. String是一个特殊的引用数据类型,==比较的是字符串对象的引用地址是否一样,equals比较的是栈中的内容是否一致。

  1. string是基础数据类型吗?基础的数据类型有哪些?

  • String不是基本数据类型,是引用类型。

  • 基本数据类型有:

  • 整型:byte(8位)、short(16位)、int(32位)、long(64位)

  • 字符型:char(16位)

5、如何实现数组和List之间的转换?

一、数组转 List

1、使用Arrays.asList()方法
String[] arr = {"中国","美国","日本","韩国","法国"};
        List<String> List = Arrays.asList(arr);
2、使用Collections.addAll()方法

该方法没有第一种方法高效,但是更加灵活。同样也是新建一个ArrayList,将数组的内容复制进去。

String[] strArray = {"中国", "美国", "日本", "韩国","英国", "法国", "德国"};
List<String> list = new ArrayList<String>();
Collections.addAll(list, strArray);
3、使用集合的addAll()方法
List list = new Arraylist();
list.addAll(Arrays.asList(list));
4、使用Spring框架将数组转换为List
CollectionUtils.arrayToList();

二、Java中将List类型转换为数组的方法

  1. 使用List.toArray()方法:

1)创建List接口的引用list,使该引用指向ArrayList的实例;将字符串“a”、"b"、"c"放入集合list中。

2)将集合list转换为数组,并输出数组中的元素。

//首先,创建List接口的引用list,使该引用指向ArrayList的实例;将字符串“a”、"b"、"c"放入集合list中,代码如下所示:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
//然后,使用List接口提供的toArray方法将集合list转换为数组,代码如下所示:
String[] strArr = list.toArray(new String[] {});
System.out.println(Arrays.toString(strArr)); // [a,b,c]

2. list.toArray(T[] a);

输出指定类型的数组,输出的数组类型与括号中参数类型一致;

必须是包装类(String、Integer、Character等),不能是基本数据类型了(string、int、char);

// 创建数组时: int [ ] arr = new int [ ] {}; 使用的是基本数据类型

Integer[] ans2 = list.toArray(new Integer[list.size()]);

案例

// 创建一个list,并且对list赋值        
List<Integer>  list = new ArrayList<>();       
for (int i = 1; i < 11; i++) {
        list.add(i);
    }


//方法一:
Object[]  ans1 = list.toArray();
System.out.println("1:" + Arrays.toString(ans1));

// 方法二:
Integer[] ans2 = list.toArray(new Integer[list.size()]);
System.out.println("2:" + Arrays.toString(ans2));


1:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值