当前位置: 首页 > 知识库问答 >
问题:

从一个类访问另一个类的列表

寇夜洛
2023-03-14

我是一名Java程序员初学者。我试图在类交通中访问类车中的两个列表,这样我就可以执行while循环,循环直到主类中的列表为空

这就是我现在掌握的代码,我试着从普通车上扩展流量,但没有成功,我被卡住了。我该怎么解决这个问题?

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class Car{ 
  static String name;
  public Object waiting_cars;

  Car(String n) {
    name = n;
  }

  public static void main(String[] args) {
    
    List<Car> waiting_cars = new ArrayList<Car>();
       
    List<Car> after_light = new ArrayList<Car>();)

    for(int i =0; waiting_cars.size()<= 99; i++){
      Car carname = new Car(name);
      waiting_cars.add(carname); //CarClass@4617c264
    }
    System.out.println(waiting_cars.size());
  }
}

class Traffic{
  void trafficLights(){
    while(!waiting_cars.size().equals(0)){ //WHERE THE PROBLEM OCCURS
      
    }
  }
}

共有1个答案

严亮
2023-03-14

作为Java的初学者(可能还有面向对象编程),Java的许多基础知识还没有成熟。所以,你想出了一个问题领域的不充分建模。

OOP的一个关键思想是,数据不是存储在一些全局可用的变量中,而是存储在某些类实例中作为私有信息。如果您需要知道这些数据,您必须友好地向实例询问信息(通过调用返回信息的方法)。如果类没有这样的方法,那么这些信息被认为是私有的,并且只对拥有该字段的实例本身可见。

现在让我们来看一下您的代码(我可以自由地对代码进行一致的缩进,这是您的IDE或支持Java的编辑器可以自动完成的):

public class Car{ 

这个类应该包含一辆车的属性和功能(至少每个人都希望它的名字是这样的)。

  static String name;

通过使用static,您可以声明所有汽车共享一个名称。为汽车单独命名(例如从车牌上取名字)更合理:省略static关键字。

  public Object waiting_cars;

在此,你宣布每辆车都有等待的车,这很奇怪,一辆车有等待的车是什么意思?此信息不应保存在汽车类中(见下文)。并且您应该声明要用于等待车辆的数据类型,例如列表

  Car(String n) {
    name = n;
  }

这定义了一个构造函数,允许您通过调用新车(“XYZ-123”)等方式为汽车提供名称 。如果更改了静态字符串名称省略static关键字,构造函数将变得绝对有效。

  public static void main(String[] args) {
    
    List<Car> waiting_cars = new ArrayList<Car>();
       
    List<Car> after_light = new ArrayList<Car>();)

    for(int i =0; waiting_cars.size()<= 99; i++){
      Car carname = new Car(name);

上面这一行毫无意义(如果删除了static关键字,它甚至不再编译)。现在,它获取静态字段name的值,并将其提供给Car构造函数,该构造函数将其存储到静态字段name,这正是它的来源。而且变量名carname有误导性,因为它听起来像是一个字符串,命名了Car,而不是Car。更合理的说法是Car=new Car(“Car-”i),为汽车命名,如“Car-0”“Car-1”等。

      waiting_cars.add(carname); //CarClass@4617c264
    }
    System.out.println(waiting_cars.size());
  }
}

你描述的问题来自你的建模。你需要处理交通信号灯,更好的建模方法是将等待的车辆和经过的车辆与一个交通信号灯相关联,而不是使它们成为车辆的一部分。

因此,您可以创建一个类TrafficLight,其中包含waitingCarscarsPassed字段。由于汽车可以到达红绿灯,并通过红绿灯,所以我想到了两种方法:arright(Car-Car)passNextCar()。差不多

public class TrafficLight {
    private List<Car> waitingCars = new ArrayList<>();
    private List<Car> carsPassed = new ArrayList<>();

    public void arrive(Car car) {
        waitingCars.add(car);
    }

    public void passNextCar() {
        if (!waitingCars.isEmpty()) {
            Car car = waitingCars.get(0);
            waitingCars.remove(0);
            carsPassed.add(car);
        }
    }
}

现在,waitingCarscarsPassed是私人的,外界看不见。如果其他类需要了解正在等待或已经通过给定交通灯的车辆,那么其他类将通过调用trafficLight之类的方法向交通灯询问该信息。getNumberWaiting()。当然,TrafficLight类中首先存在这种方法,例如。

    public int getNumberWaiting() {
        return waitingCars.size();
    }

 类似资料:
  • 我想访问另一个类的列表,然后把它放在我的对象中。 包含列表的第一个类。 从第一类访问列表的第二类。 当我使用时,它不会返回任何类似于空列表的内容,并且不会在应用程序上显示任何内容。

  • 问题内容: 我是Java的新手,但是碰到了砖墙。我想从另一个类访问GUI组件(已在一个类中创建)。我正在从一个类创建一个新的GUI类,就像这样; 并且我可以访问该类中的组件,但是当我去另一个类时,我不能。我真的只需要访问即可更新其内容。有人可以向我指出正确的方向,任何帮助将不胜感激。 类: 问题答案: 首先要尊重封装规则。做你的领域。接下来,您需要输入需要访问的字段。 然后,您需要将GUI传递给访

  • 我是爪哇的新手,遇到了困难。我想从另一个类访问GUI组件(在一个类中创建)。我正在从一个类创建一个新的GUI类,就像这样; 我可以访问该类中的组件,但当我转到其他类时,我无法访问。我真的需要访问来更新它们的内容。有人能给我指一下正确的方向吗?非常感谢您的帮助。 类:

  • 我是java新手,我不知道如何从另一个类访问变量 我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量 如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。