📄 executionexperiment.java
字号:
import java.io.*;
interface Execute {
void initData(int totalNumber, int initPos, long initStep); // 数据初始化
void execute(); // 模拟执行处死犯人
int getSurvival(); // 返回生存下来的犯人的序号
}
class Execution implements Execute {
int[] data; // 存放现有犯人的序号
int currNumber; // 存放现有犯人的总数
int currPos; // 存放下一次要被处死的犯人在数组中的位置
long currStep; // 存放下一次寻找犯人的步长
public void initData(int totalNumber, int initPos, long initStep) {
currNumber = totalNumber;
currPos = initPos;
currStep = initStep;
data = new int[totalNumber];
for (int i = 0; i < totalNumber; i++)
data[i] = i;
}
public int getSurvival() {
return data[0];
}
public void execute() {
while (data.length > 1) {
currStep += data[currPos];
for (int i = currPos; i < data.length - 1; i++) {
data[i] = data[i + 1];
}
int[] temp = new int[data.length - 1];
System.arraycopy(data, 0, temp, 0, data.length - 1);
data = temp;
currNumber--;
if (currPos == data.length) {
currPos = 0;
}
for (long i = 2; i <= currStep; i++) {
if (currPos == data.length - 1) {
currPos = 0;
} else {
currPos++;
}
}
}
}
}
public class ExecutionExperiment {
public static void experiment(Execute exec) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = "";
System.out.println("请输入:犯人总数 起始犯人号 初始步长");
try {
line = br.readLine();// 读取一行数据
} catch (IOException ioe) {
}
if (line.equals("finish")) // 如果用户的一行输入是“finish”,则程序全部退出。
System.exit(0);
String[] numbers = line.split(" ");
// 把输入的一行数据解析出三个参数:犯人总数、初始犯人号、初始步长
int total = Integer.parseInt(numbers[0]);
int begin = Integer.parseInt(numbers[1]);
long step = Long.parseLong(numbers[2]);
exec.initData(total, begin, step);
exec.execute();
int survival = exec.getSurvival();
System.out.println("逃生的犯人是:" + survival + "号");
System.out.println();
}
public static void main(String[] args) {
while (true) {
Execution execution = new Execution();
experiment(execution); // 对象上转型和接口回调
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -