接上一个,数组模拟队列:https://blog.csdn.net/qq_37312838/article/details/115025247
存在一些问题,改进用环形数组模拟队列。
1、数组模拟环形队列
分析说明:
1) 尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的
时候需要注意 (rear + 1) % maxSize == front 满]
2) rear == front [空]
3) 分析示意图:
思路如下:
1. front 变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素
front 的初始值 = 0
2. rear 变量的含义做一个调整:rear 指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定.
rear 的初始值 = 0
3. 当队列满时,条件是 (rear + 1) % maxSize == front 【满】
4. 对队列为空的条件, rear == front 空
5. 当我们这样分析, 队列中有效的数据的个数 (rear + maxSize - front) % maxSize // rear = 1 front = 0
代码实现:
CircleArrayQueue.java
package com.yg.datastructures.queue;
/**
* @Description: 环形数组 模拟 队列 模型
* @Author yg
* @Date 2021-03-20 10:33
*/
public class CircleArrayQueue {
private final int maxSize;
/**
* 该数组存放数据,模拟队列
*/
private final String[] arr;
/**
* 队列头 指针
*/
private int front;
/**
* 队列 追后一个元素的 后一个位置
*/
private int rear;
/**
* 串讲队列 构造器
*/
public CircleArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new String[maxSize];
/**
* 指向队列头部,
* 指向队列头部的前一个位置。
*
*/
front = 0;
/**
* 指向队列尾最后一个元素的后一个位置
*
*/
rear = 0;
}
/**
* 判断队列是否满了
* (rear + 1) % maxSize == front
*
* @return
*/
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
/**
* 判断队列是否为空
*
* @return
*/
public boolean isEmpty() {
return rear == front;
}
/**
* 添加数据到队列
*/
public void addQueue(String data) {
if (isFull()) {
System.out.println("队列已经满了,不能加入数据");
return;
}
//直接将rear加到后一个指针
arr[rear] = data;
//这里循环 取模 防止数组越界
rear = (rear + 1) % maxSize;
}
/**
* 获取队列的一个元素
*
* @return String 数据
*/
public String getQueue() {
if (isEmpty()) {
throw new RuntimeException("队列已经没有数据了,不能获取数据");
}
//front 是指向队列的第一个元素
String data = arr[front];
//front 向后移动,取模 循环
front = (front + 1) % maxSize;
return data;
}
/**
* 显示队列的所有数据
*/
public void showQueue() {
if (isEmpty()) {
System.out.println("队列为空,没有数据!");
return;
}
System.out.println("-------------------开始打印队列-------------------");
//从front 开始遍历,遍历多少个元素
for (int i = front; i < front + getValueCount(); i++) {
System.out.printf("arr[%d]=%s\n", i % maxSize, arr[i % maxSize]);
}
for (String data : arr) {
System.out.print(data + " ");
}
System.out.println();
System.out.println("-------------------结束打印队列-------------------");
}
/**
* 显示队列的头部数据
*/
public void showHeadQueue() {
if (isEmpty()) {
throw new RuntimeException("队列为空,没有头部数据显示!");
}
System.out.println("队列的头部元素是:" + arr[front]);
}
/**
* 获取 档期那数组的 有效数据的个数
*
* @return
*/
public int getValueCount() {
return (rear - front + maxSize) % maxSize;
}
}
CircleArrayQueueTest.java
package com.yg.datastructures.queue;
import java.util.Scanner;
/**
* @Description: 数组模拟环形队列
* @Author yg
* @Date 2021-03-20 12:47
*/
public class CircleArrayQueueTest {
public static void main(String[] args) {
System.out.println("----------------程序开始----------------------");
CircleArrayQueue circleArrayQueue = new CircleArrayQueue(5);
// arrayQueue.addQueue("yg");
// arrayQueue.addQueue("fm");
// arrayQueue.addQueue("lb");
// arrayQueue.addQueue("was");
// arrayQueue.addQueue("bjy");
// arrayQueue.showQueue();
// arrayQueue.showHeadQueue();
// String queue = arrayQueue.getQueue();
// System.out.println("获取到队列的一个元素 = " + queue);
// arrayQueue.showQueue();
// arrayQueue.showHeadQueue();
//
Scanner scanner = new Scanner(System.in);
boolean loop = true;
while (loop) {
System.out.println("---------------控制台----------------");
System.out.println("s(show) : 展示队列");
System.out.println("e(exit) : 退出队列");
System.out.println("a(add) : 添加队列");
System.out.println("g(get) : 获取队列头部元素");
System.out.println("h(head) : 展示队列头部元素");
System.out.println("---------------控制台----------------");
String input = scanner.next();
switch (input) {
case "s":
circleArrayQueue.showQueue();
break;
case "e":
scanner.close();
loop = false;
break;
case "a":
System.out.println("请输入添加的元素:");
String next = scanner.next();
circleArrayQueue.addQueue(next);
break;
case "h":
try {
circleArrayQueue.showHeadQueue();
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case "g":
try {
String queue = circleArrayQueue.getQueue();
System.out.println("头部元素 =" + queue);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
default:
break;
}
}
System.out.println("----------------程序结束----------------------");
}
}
输出结果:
D:\jdk1.8.0_251\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:7390,suspend=y,server=n -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.3\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "D:\jdk1.8.0_251\jre\lib\charsets.jar;D:\jdk1.8.0_251\jre\lib\deploy.jar;D:\jdk1.8.0_251\jre\lib\ext\access-bridge-64.jar;D:\jdk1.8.0_251\jre\lib\ext\cldrdata.jar;D:\jdk1.8.0_251\jre\lib\ext\dnsns.jar;D:\jdk1.8.0_251\jre\lib\ext\jaccess.jar;D:\jdk1.8.0_251\jre\lib\ext\jfxrt.jar;D:\jdk1.8.0_251\jre\lib\ext\localedata.jar;D:\jdk1.8.0_251\jre\lib\ext\nashorn.jar;D:\jdk1.8.0_251\jre\lib\ext\sunec.jar;D:\jdk1.8.0_251\jre\lib\ext\sunjce_provider.jar;D:\jdk1.8.0_251\jre\lib\ext\sunmscapi.jar;D:\jdk1.8.0_251\jre\lib\ext\sunpkcs11.jar;D:\jdk1.8.0_251\jre\lib\ext\zipfs.jar;D:\jdk1.8.0_251\jre\lib\javaws.jar;D:\jdk1.8.0_251\jre\lib\jce.jar;D:\jdk1.8.0_251\jre\lib\jfr.jar;D:\jdk1.8.0_251\jre\lib\jfxswt.jar;D:\jdk1.8.0_251\jre\lib\jsse.jar;D:\jdk1.8.0_251\jre\lib\management-agent.jar;D:\jdk1.8.0_251\jre\lib\plugin.jar;D:\jdk1.8.0_251\jre\lib\resources.jar;D:\jdk1.8.0_251\jre\lib\rt.jar;D:\IdeaProjects\datastructures\target\classes;D:\RepMaven\org\springframework\boot\spring-boot-starter-web\2.4.4\spring-boot-starter-web-2.4.4.jar;D:\RepMaven\org\springframework\boot\spring-boot-starter\2.4.4\spring-boot-starter-2.4.4.jar;D:\RepMaven\org\springframework\boot\spring-boot\2.4.4\spring-boot-2.4.4.jar;D:\RepMaven\org\springframework\boot\spring-boot-autoconfigure\2.4.4\spring-boot-autoconfigure-2.4.4.jar;D:\RepMaven\org\springframework\boot\spring-boot-starter-logging\2.4.4\spring-boot-starter-logging-2.4.4.jar;D:\RepMaven\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\RepMaven\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\RepMaven\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;D:\RepMaven\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;D:\RepMaven\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\RepMaven\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\RepMaven\org\yaml\snakeyaml\1.27\snakeyaml-1.27.jar;D:\RepMaven\org\springframework\boot\spring-boot-starter-json\2.4.4\spring-boot-starter-json-2.4.4.jar;D:\RepMaven\com\fasterxml\jackson\core\jackson-databind\2.11.4\jackson-databind-2.11.4.jar;D:\RepMaven\com\fasterxml\jackson\core\jackson-annotations\2.11.4\jackson-annotations-2.11.4.jar;D:\RepMaven\com\fasterxml\jackson\core\jackson-core\2.11.4\jackson-core-2.11.4.jar;D:\RepMaven\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.4\jackson-datatype-jdk8-2.11.4.jar;D:\RepMaven\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.4\jackson-datatype-jsr310-2.11.4.jar;D:\RepMaven\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.4\jackson-module-parameter-names-2.11.4.jar;D:\RepMaven\org\springframework\boot\spring-boot-starter-tomcat\2.4.4\spring-boot-starter-tomcat-2.4.4.jar;D:\RepMaven\org\apache\tomcat\embed\tomcat-embed-core\9.0.44\tomcat-embed-core-9.0.44.jar;D:\RepMaven\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;D:\RepMaven\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.44\tomcat-embed-websocket-9.0.44.jar;D:\RepMaven\org\springframework\spring-web\5.3.5\spring-web-5.3.5.jar;D:\RepMaven\org\springframework\spring-beans\5.3.5\spring-beans-5.3.5.jar;D:\RepMaven\org\springframework\spring-webmvc\5.3.5\spring-webmvc-5.3.5.jar;D:\RepMaven\org\springframework\spring-aop\5.3.5\spring-aop-5.3.5.jar;D:\RepMaven\org\springframework\spring-context\5.3.5\spring-context-5.3.5.jar;D:\RepMaven\org\springframework\spring-expression\5.3.5\spring-expression-5.3.5.jar;D:\RepMaven\mysql\mysql-connector-java\8.0.23\mysql-connector-java-8.0.23.jar;D:\RepMaven\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\RepMaven\org\springframework\spring-core\5.3.5\spring-core-5.3.5.jar;D:\RepMaven\org\springframework\spring-jcl\5.3.5\spring-jcl-5.3.5.jar;D:\JetBrains\IntelliJ IDEA 2020.3\lib\idea_rt.jar" com.yg.datastructures.queue.CircleArrayQueueTest
Connected to the target VM, address: '127.0.0.1:7390', transport: 'socket'
----------------程序开始----------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
libai
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
dengchao
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
konglinghui
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
ss
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
dd
队列已经满了,不能加入数据
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=libai
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
-------------------开始打印队列-------------------
libai dengchao konglinghui ss null
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=libai
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
-------------------开始打印队列-------------------
libai dengchao konglinghui ss null
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=libai
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
-------------------开始打印队列-------------------
libai dengchao konglinghui ss null
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:libai
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:libai
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:libai
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=libai
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
-------------------开始打印队列-------------------
libai dengchao konglinghui ss null
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
g
头部元素 =libai
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
haha
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
-------------------开始打印队列-------------------
libai dengchao konglinghui ss null
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
baijiyu
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
arr[4]=baijiyu
-------------------开始打印队列-------------------
libai dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[1]=dengchao
arr[2]=konglinghui
arr[3]=ss
arr[4]=baijiyu
-------------------开始打印队列-------------------
libai dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:dengchao
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:dengchao
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
g
头部元素 =dengchao
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:konglinghui
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[2]=konglinghui
arr[3]=ss
arr[4]=baijiyu
-------------------开始打印队列-------------------
libai dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
nihaowode
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[2]=konglinghui
arr[3]=ss
arr[4]=baijiyu
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[2]=konglinghui
arr[3]=ss
arr[4]=baijiyu
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:konglinghui
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
ok,你很棒
队列已经满了,不能加入数据
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[2]=konglinghui
arr[3]=ss
arr[4]=baijiyu
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
g
头部元素 =konglinghui
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
g
头部元素 =ss
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
g
头部元素 =baijiyu
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
h
队列的头部元素是:nihaowode
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=nihaowode
-------------------开始打印队列-------------------
nihaowode dengchao konglinghui ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
展示
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
a
请输入添加的元素:
假日
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=nihaowode
arr[1]=展示
arr[2]=假日
-------------------开始打印队列-------------------
nihaowode 展示 假日 ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
s
arr[0]=nihaowode
arr[1]=展示
arr[2]=假日
-------------------开始打印队列-------------------
nihaowode 展示 假日 ss baijiyu
-------------------结束打印队列-------------------
---------------控制台----------------
s(show) : 展示队列
e(exit) : 退出队列
a(add) : 添加队列
g(get) : 获取队列头部元素
h(head) : 展示队列头部元素
---------------控制台----------------
e
----------------程序结束----------------------
Disconnected from the target VM, address: '127.0.0.1:7390', transport: 'socket'
Process finished with exit code 0