我正在尝试解决Josephus问题,但我不允许使用其他人的代码片段。考虑到这一点,我的代码中有27个错误,但无法弄清楚如何修复它。你会不会很好的人向我解释为什么它不会编译。我想看看我的逻辑是否存在缺陷,但我无法测试它,因为它无法编译。任何其他提示都非常受欢迎!这是我的代码:
import java.util.*;
public class Josephus
{
public class Link
{
public int num;
public Link next;
public Link (int d)
{
num = d;
next = null;
}
}
public class Main
{
Scanner in = new Scanner(System.in);
System.out.println("How many players");
int numPlayers = in.nextInt();
Link first, last;
first = last = new Link (1);
for(int k=2; k<=numPlayers; k++)
{
last.next = new Link(k);
last = last.next;
}
last.next = first;
System.out.println("How many skips");
int m = in.nextInt();
for (int g=0; g<numPlayers; g++)
{
for (int k=0; k<=m; k++);
{
last = last.next;
}
last.next;
last = last.next;
}
}
}
答案 0 :(得分:2)
而不是
public class Main
你想要
public static void main(String [] args)
答案 1 :(得分:0)
我清理了一些你的代码以便编译,你可能会更好地使用两个类
Josephus.java
import java.util.Scanner;
public class Josephus {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("How many players");
int numPlayers = in.nextInt();
Link first = new Link(1);
Link last = new Link(1);
for (int k = 2; k <= numPlayers; k++) {
last.next = new Link(k);
last = last.next;
}
last.next = first;
first.next = last;
System.out.println("How many skips");
int m = in.nextInt();
for (int g = 0; g < numPlayers; g++) {
for (int k = 0; k <= m; k++)
{
last = last.next;
}
// last.next;
last = last.next;
}
in.close();
}
}
和Link.java
public class Link {
public int num;
public Link next;
public Link(int d) {
num = d;
next = null;
}
}
这会编译并接受输入,然后抛出错误。我没有解释,因为我不确切地知道你想要达到的目的。
<强>的变化:强>
现在您需要的只是在嵌套循环中实现Josephus逻辑并输出结果(如果需要),所有这些都应该与语言无关。
答案 2 :(得分:0)
您的代码的另一个问题是您有一个非静态内部类Link
,并且您尝试在没有包含类Josephus
的封闭实例的情况下实例化它。
所以要么make是静态的
public static class Link
或使用封闭类
的实例来实例化它Josephus outer = new Josephus();
first = last = outer.new Link (1);
// ...
last.next = outer.new Link(k);
更好的是,将类移到自己的编译单元,即文件Link.java
,直到您了解inner classes。
行
last.next;
不正确。你想用last.next
做什么?您必须将其分配给其他变量。我认为你不需要它,只需删除它。