尝试输出实例类中链表的内容时,无法从静态上下文错误中引用方法



我是一名初级Java程序员,我正试图通过让Boat打印出它的链表内容,来检查我是否成功地将Clients类中存储的链表中的Person实例复制到Boat类实例中名为乘客的链表中。

我正在使用Boat类的givePassengers()方法来打印Boat类——它的乘客链接列表内容。

然而,当我尝试这样做时,我遇到了错误"非静态方法givePassengers()不能从静态上下文中引用",我不知道该写什么来解决这个问题。我在下面列出了我认为是问题代码的内容。我们非常感谢任何协助。

我已将重要代码标记为"//!!"

这是包含船只链接列表的类

import java.io.*;
import java.util.*;
public class Base implements Serializable
{   private LinkedList<Boat> boats = new LinkedList<Boat>();
    private Clients clients = new Clients();
public void setup() // !! Here are the instances of the boat class
    {   boats.add(new Boat(1, "Ed", 2));
        boats.add(new Boat(2, "Fred", 7));
        boats.add(new Boat(3, "Freda", 5));   }

  public void showpassengers() {
        for (Boat i: boats) `// !! The for each loop cycles through each boat to check for passengers`
           Boat.givePassengers(); // !! This line produces the error
    }

这是船级

import java.io.*;
import java.util.*;
public class Boat implements Serializable
{   private int id;
    private String pilot;
    private int stops;
    private LinkedList<Person> passengers = new LinkedList<Person>();
    private double rate = 10.00;
    public int scannableId = this.id;
 public Boat(int id, String pilot, int stops)
    {   this.id = id;
        this.pilot = pilot;
        this.stops = stops;   }

    public void givePassengers () {
System.out.println(passengers); // !! this line is supposed to print out the contents of the boat classes' linked list so I can check that it worked.
        }

这是个人类

import java.io.*;
import java.text.*;
public class Person implements Serializable
{   private String name;
    private int id;
    private double cash = 100.00;
    private int start = 0;
    private int end = 0;
    private double charge = 0;
   public Person(String name, int id)
    {   this.name = name;
        this.id = id + 100; }
}

这是包含人员链接列表的类

import java.io.*;
import java.util.*;
public class Clients implements Serializable
{   private LinkedList<Person> clients = new LinkedList<Person>();
    private int id = 1;
    public Clients() `// !! Here are the instances of Person in the class clients`
    {   clients.add(new Person("Homer", id++));
        clients.add(new Person("Marge", id++));  
    }
)

如果这对有帮助的话,下面是根类

import java.io.*;
public class Root
{   public Root() {
        new Base();
    }
    public static void main(String[] args)
    {   new Root(); }

    private Base base;
}

您的问题在这里:

for (Boat i: boats) 
   Boat.givePassengers(); // !! This line produces the error

您需要说i.givePassengers()来引用类Boat的特定实例。这里有一本关于类和对象之间区别的入门读物。

您不能从Boat静态调用givePassengers(),它不是一个静态方法。您需要从Boat的实例中调用它。在foreach循环中将Boat.givePassengers();替换为i.givePassengers();。这将导致当前选定的Boat实例运行givePassengers()。

最新更新