Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java语法问题_Java_Compilation_Josephus - Fatal编程技术网

Java语法问题

Java语法问题,java,compilation,josephus,Java,Compilation,Josephus,我试图解决Josephus问题,但我不允许使用其他人的代码片段。考虑到这一点,我的代码中有27个错误,但不知道如何修复它。你们这些优秀的人能给我解释一下为什么它不能编译吗。我想看看我的逻辑是否有缺陷,但我无法测试它,因为它无法编译。任何其他提示都是非常欢迎的!这是我的密码: import java.util.*; public class Josephus { public class Link { public int num; public

我试图解决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;
        }
    }
}
import java.util.*;
公务舱约瑟夫
{
公共类链接
{
公共整数;
公共链接下一步;
公共链接(int d)
{
num=d;
next=null;
}
}
公共班机
{
扫描仪输入=新扫描仪(系统输入);
System.out.println(“多少玩家”);
int numPlayers=in.nextInt();
链接第一,最后;
第一个=最后一个=新链接(1);
对于(int k=2;k而不是

public class Main
你想要

public static void main(String [] args)

我对你的代码做了一些清理,这样它就可以编译了,你最好使用两个类

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();
}
}
这会编译并接受输入,然后抛出一个错误。我还没有修复这个错误,因为我不知道您想要实现什么

更改:

  • 将“class main”更改为“public static void main(){…”,Java运行时将在调用该方法时查找该方法
  • 将类'Link'提取到它自己的文件中其他解决方案也是可能的,就像其他一些答案所说的,您可以将它声明为静态的或实例化'Josephus'(可能还有其他一些方法)
  • 注释掉了行“last.next”,这实际上并没有解决任何问题,它只是消除了编译错误并允许您进行编译,因为我看不出您在这里试图做什么,我想不出更好的解决方案
  • 不需要编译,但我在main方法的末尾添加了一行'in.close();'来释放分配的资源,如果没有这一行,它将抛出编译警告。
  • 添加了“first.next=last;”,以避免发生空指针异常

  • 现在需要做的就是在嵌套循环中实现Josephus逻辑并输出结果(如果需要)所有这些都应该与语言无关。

    代码的另一个问题是,您有一个非静态的内部类
    链接
    ,您试图在没有包含类
    Josephus
    的封闭实例的情况下实例化它

    所以这两个make都是静态的

    public static class Link
    
    或者使用封闭类的实例实例化它

    Josephus outer = new Josephus();
    first = last = outer.new Link (1);
    // ...
    last.next = outer.new Link(k);
    
    更好的是,将类移动到自己的编译单元中,即文件
    Link.java
    ,直到您了解

    线路呢

    last.next;
    

    不正确。上一步你想用
    做什么?下一步你必须将它分配给其他变量。我认为你无论如何都不需要它,只需删除它。

    考虑使用带有语法高亮显示的IDE。你在使用什么IDE?Eclipse?-1没有引用至少前2-3个错误。除了明显的语法错误之外,请注意为此:
    first=last=newlink(1);
    。这很危险。对象与原语不同。2变量将引用同一个对象。您可能需要两个不同的对象。好的,我的讲师要求我们使用Jgrasp。错误为“预期标识符”和指向括号,但使用“public static void Main(String[]args)”后现在只有4个错误。解决方案首先是指向public static void Main(String[]args)中类和void之间的空格的同一个错误。下一个错误是无效的方法声明;返回类型必需的public class void Main(String[]args)。这个错误指向大写字母M。下一个错误是错误:不是最后一个语句。下一个;这指向上一个和下一个之间的时间段。我可以修复最后一个。这是一个好的开始。如果不清楚该计划的总体目的,就很难提出任何其他具体建议。通过分析当前的实施可能会导致错误信息。该程序的目的是使用链接列表制作循环列表,并在特定的时间间隔删除编号,直到只剩下一个。该程序的目的是使用链接列表制作循环列表,并在特定的时间间隔删除编号,直到只剩下一个。感谢您使用我的code,我不想成为一个麻烦,但你能解释一下为什么这些更改会解决问题吗?就像其他一些用户建议的那样,最简单的方法可能是将代码粘贴到编辑器中,我建议使用Eclipse。IDE将突出显示代码中的错误,并为大多数错误提供解释。有些事情我将添加一个编辑解释一些修改。我正在尝试将链接从列表中的一个项目移动到跳过一个项目,然后指向一个项目,因此本质上它会“删除”链接列表中的一个项目,因为再也没有指针指向该项目了。我根本不理解封闭类的内容。当您声明一个类
    Foo
    时,以及在该类的声明内部,即在开始
    {
    和结束
    }之间,您能给我解释一下吗???@user2738094
    ,你声明了另一个类
    Bar
    ,然后
    Bar
    被称为
    内部类
    ,至于内部的所有东西,必须有东西包围它,这就是类
    Foo
    。因此
    Foo
    是外部类,也被称为顶级类,它包围了内部类
    Bar
    >。在您的情况下,
    Josephus
    是一个外部类,它包含内部类
    链接
    。请阅读我为内部类粘贴的链接中的文档,这里的解释更好。
    last.next;