JAVA面向对象完成约瑟夫环的流程
时间: 2024-02-24 09:07:11 浏览: 76
Group7SolarTrails:约瑟夫·尼克松和亚当·希亚特
约瑟夫环是一个经典的问题,可以使用面向对象的方式来实现。下面是使用Java语言面向对象完成约瑟夫环的流程:
1. 创建一个Person类,用于表示每个人。该类包含姓名和编号两个属性。
```java
public class Person {
private String name;
private int id;
public Person(String name, int id) {
this.name = name;
this.id = id;
}
// 省略getter和setter方法
}
```
2. 创建一个Circle类,用于表示约瑟夫环。该类包含一个Person类型的数组和一个指向当前位置的指针。
```java
public class Circle {
private Person[] persons;
private int current;
public Circle(int n) {
persons = new Person[n];
for (int i = 0; i < n; i++) {
persons[i] = new Person("Person" + (i+1), i+1);
}
current = 0;
}
// 省略其他方法
}
```
3. 创建一个getNext方法,用于获取下一个出圈的人的位置。
```java
private int getNext() {
int next = current + 1;
while (persons[next] == null) {
next = (next + 1) % persons.length;
}
return next;
}
```
4. 创建一个go方法,用于从当前位置开始报数,报到m的人出圈。
```java
public void go(int m) {
while (count > 0) {
for (int i = 0; i < m-1; i++) {
current = getNext();
}
System.out.println(persons[current].getName() + "出圈");
persons[current] = null;
count--;
current = getNext();
}
}
```
5. 在主函数中创建一个Circle对象,并调用go方法开始游戏。
```java
public static void main(String[] args) {
Circle circle = new Circle(10);
circle.go(3);
}
```
以上就是使用Java语言面向对象完成约瑟夫环的流程。
阅读全文