2016-12-13 2 views
0

Я пытался кодировать проект в кино, но я не могу это понять. Когда я запускаю свою программу, он выводит только последнее значение, введенное в setAge, поэтому позволяет всем, кто находится перед ним, в кино, даже если они не соответствуют возрасту. Я считаю, что это имеет какое-то отношение к объекту person, не являющемуся массивом, но я не уверен, как решить это, какие-либо идеи?Проекты и проекты объектов для кинотеатров

import java.util.Scanner; 


public class Cinema 
{ 
    public static void main(String[] args) 
    { 
     QueueWithArray q = new QueueWithArray(); 

     Person person = new Person(); 

     Scanner kybd = new Scanner(System.in); 
     System.out.print("Join (j), leave (l) or end (e)? "); 
     String action = kybd.nextLine(); 
     while (!action.equalsIgnoreCase("e")) 
     { 
      if (action.equalsIgnoreCase("j")) 
      { 
       System.out.print("Enter your name: "); 
       String name = kybd.nextLine(); 
       person.setName(name); 
       q.add(name); 
       System.out.println("What is your age? "); 
       int age = kybd.nextInt(); 
       person.setAge(age); 
       kybd.nextLine(); 

       System.out.println(name + " is going to the cinema and is " + age + " years old."); 
      } 
      else if (action.equalsIgnoreCase("l")) 
      { 
       if (!q.isEmpty()) 
       { 
        if (person.getAge() >= 15) 
        { 
         System.out.println(q.remove() + " has left the queue and entered the cinema"); 

        } 
        else 
        { 
         System.out.println(q.remove() + " has left the queue, but is not old enough to watch the film"); 
        } 
       } 
       else 
       { 
        System.out.println("Queue empty"); 
       } 
      } 
      else 
      { 
       System.out.println("Invalid operation"); 
      } 
      System.out.print("Join (j), leave (l) or end (e)? "); 
      action = kybd.nextLine(); 
     } 
    } 

} 

ответ

0

У вас должен быть второй QueueWithArray, в котором хранятся люди.

Представьте, что у вас есть отверстие для пигмента, в которое вы можете положить лист бумаги с возрастом на него. Каждый раз, когда вы делаете p.setAge (возраст), вы вынимаете бумагу из отверстия пиджона и кладете новый шт. с указанным возрастом.

Когда дело доходит до увольнения, вы каждый раз читаете один и тот же лист бумаги для каждого человека. Вместо этого вы хотите иметь очередь веков, чтобы для каждого имени вы сохраняли возраст.

Что-то вроде

System.out.print("Enter your name: "); 
String name = kybd.nextLine(); 
System.out.println("What is your age? "); 
int age = kybd.nextInt(); 
qName.add(name); 
qAge.add(age); 
kybd.nextLine(); 

или лучший способ сделать это:

System.out.print("Enter your name: "); 
String name = kybd.nextLine(); 
System.out.println("What is your age? "); 
int age = kybd.nextInt(); 
Person person = new Person(name, age); 
qPerson.add(person); 
kybd.nextLine(); 
+0

Здравствуйте, это хороший ответ, но теперь, когда я получил линию Person человек = новое лицо (Назовите возраст); он не примет его, так как он имеет параметры – Luke

+0

Вам необходимо создать конструктор для объекта person, который принимает параметры. Таким образом, это будет похоже на public Person (String name, int age) {this.name = name; this.age = age;} –

+0

Я сделал это, но теперь его ошибка, говорящая, что человек не может быть изменен на строку, когда я пытаюсь объявить qPerson – Luke

Смежные вопросы