【问题标题】:Ready to pull my hair out Java Queues with objects准备好用对象把我的头发从 Java 队列中拉出来
【发布时间】:2013-12-08 19:20:00
【问题描述】:

谁能告诉我我哪里出错了我有三个文件 Person.java Queue.java 和 Cinema.java,我设法在没有对象 Person.java 的情况下进行队列。我在用对象实现时遇到了问题。

这是我的 Queue.java

    public class Queue
{
    private Person[] person = new Person[10];       
    private int rear;

    public Queue()
    {

       rear = 0;                      
    }

    public boolean isEmpty()
    {
         return rear == 0;
    }

    public String remove()          //remove String element
    {
        String result = person[0].toString();       //shuffle String elements
        rear--;
        for (int i = 0; i < rear ; i++)
        {
            person[i] = person[i + 1];
        }
        return result;
    }

    public void add(Person x)           //add String element
    {
        if (rear == person.length)
        {
            resize();
        }
        person[rear] = x;
        rear++;
    }  

    private void resize()
    {
        Person[] temp = new Person[person.length * 2];    //resize String array
        for (int i = 0; i < person.length; i++)
        {
            temp[i] = person[i];
    }
        person = temp;
    }
}

然后是 Person.java (Object)。

    public class Person
{
    private String name;
    private int age = 0;

    public Person(String name1, int age1)
    {
        this.name = name1;
        this.age = age1;
    }
}

这是主要的 java 文件 Cinema.java

    import java.util.*;
public class Cinema {
    public static void main (String[] args)
    {
        Queue q = new Queue();
        Scanner k = new Scanner(System.in);
        System.out.print("Enter name: ");
                String name = k.nextLine();
                System.out.print("Enter Age : ");
                int age = k.nextInt();

                q.add(name);
                System.out.println(name + " joined queue");
    }
}

基本上我希望一个人加入一个姓名和年龄的队列,第一个人去买票并检查年龄。我可以做检查位,它只是让它与对象一起读取。

谢谢

【问题讨论】:

  • 从您对Queue.java 的实现中,我感觉到Stack 类。谷歌关于“什么是队列”?

标签: java object queue


【解决方案1】:

所以我在这里看到两个问题:

  1. Queue 类似乎被实现为堆栈而不是队列。我建议谷歌了解什么是队列。

  2. 在你的主要方法中

                String name = k.nextLine();
                System.out.print("Enter Age : ");
                int age = k.nextInt();
    
                q.add(name);
    

    这里,add 方法需要 person 对象作为其参数,而不是 String 对象。 代码应该是这样的:

            String name = k.nextLine();
            System.out.print("Enter Age : ");
            int age = k.nextInt();
            Person p1 = new Person(name,age);
            q.add(p1);
    

希望这会有所帮助。

编辑!!!

对于您在评论中的问题。如果要返回队列中人员的年龄。您首先必须创建两个 getter 方法。一个在 Person 类中,另一个在 Queue 类中:

亲自上课:

public int getAge()
{
return age;
}

在队列类中:

public Person[] getPerson() 
    {
        return person;
    }

写下这些函数后。您可以将队列中的人的年龄设置为:

Person[] p = q.getPerson(); // q is the Queue object
for(int i=0;i<p.length;i++)
{
 if(p[i]!=0)
  {
   System.out.println(p[i].getAge());
  }
}

希望这会有所帮助。如果这有助于您解决问题,请投票并选择正确的答案。

【讨论】:

  • 设法让那个位工作,但如果我想让 Queue 返回对象的年龄,我会做 public int age() { 然后代码,但我不能像 person.getAge() 一样:(
  • @user3004559:在我的回答中查看编辑
  • Cheers mate 让它工作起来,甚至添加了更多我自己,一旦我进入代码,如果你明白我的意思,它就会弹出。我不能投票,因为我没有足够的代表,但一旦我愿意。
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2012-04-21
  • 2016-06-14
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多