2012-02-17 4 views
2

В основном программа должна создать «круглый стол» руководителей с председателем, который не может быть изменен. Я немного разбираюсь в том, что делаю, и примерно на полпути к моим методам вставки и удаления руководителей, но я просто попытался проверить свой код, чтобы увидеть, как он идет, и он получает ошибки, как только я ввожу председателей Информация. Кроме того, я не совсем уверен в том, как я буду использовать метод removeByCorporation в ExecutiveList. Я почти уверен, что метод почти все неверен, и я просто не как удалить узел в круговом двусвязном списке, подобном этому.Циркулярная программа с двойным списком в Java (Справка по домашней задаче)

* Не нужно помогать мне с методами печати, я просто еще не добрался до них.

tl; dr: 1) Почему это сбой сразу? 2) Я почти уверен, что мой метод removeByCorporation полностью ошибочен. Если да, какие-либо предложения или помощь по их устранению?

Вот два класса, с которыми у меня возникают проблемы, если вы хотите, чтобы другие дали мне знать, и я опубликую их, но они на 99% геттеры и сеттеры.

ПЕРВЫЙ КЛАСС

public class ExecutiveList { 

private ExecutiveNode chair; 
ExecutiveNode cursor; 

public ExecutiveList() { 

} 

public ExecutiveList (Executive chairperson) { 

    chair.setExecutive(chairperson); 
    chair.left = chair; 
    chair.right = chair; 
} 

public void insertLeftOfChair(Executive exec) { 

    ExecutiveNode newExec = new ExecutiveNode(); 
    newExec.setExecutive(exec); 
    chair.setLeft(newExec); 

} 

public boolean insertRightOfExec (Executive exec, String target) { 
    cursor = chair; 
    ExecutiveNode newExec = new ExecutiveNode(); 

    do { cursor = cursor.getLeft(); 
    if (cursor.getExecutive().equals(exec)) { 
     newExec.setExecutive(exec); 
     cursor.getRight().setLeft(newExec); 
     newExec.setLeft(cursor); 
     newExec.setRight(cursor.getRight()); 
     cursor.setRight(newExec); 
     return true; 
    } 
    else { 
     return false; 
    } 
    }  while (cursor.getExecutive().getExecutiveName() != target); 


} 

public boolean insertLeftOfExec (Executive exec, String target) { 
    cursor = chair; 
    ExecutiveNode newExec = new ExecutiveNode(); 
    do { cursor = cursor.getLeft(); 
     if (cursor.getExecutive().equals(exec)) { 
      newExec.setExecutive(exec); 
      cursor.getLeft().setRight(newExec); 
      newExec.setRight(cursor); 
      newExec.setLeft(cursor.getRight()); 
      cursor.setLeft(newExec); 

      return true; 
     } 
     else { 
      return false; 
     } 
    }  while (cursor.getExecutive().getExecutiveName() != target); 
} 

public boolean removeTargetExec(String name) { 
    if (chair.equals(name)) { 
     return false; 
    } 
    else { 
     return false; 
    } 
} 

public int removeByCorporation(String corporation) { 
    int removed = 0; 
    cursor = chair; 
    do { 
     if (cursor.getExecutive().getCompanyName().equals(corporation)) { 
      cursor.setExecutive(null); 
      cursor.getLeft(); 
      removed = removed + 1; 
     } 
    } while (removed > 0); 

    return removed; 
} 

public void printByCorporation(String corporation) { 

} 

public void printAllClockwise() { 

} 

public void printAllCounterClockwise() { 

} 
    } 

ВТОРОЙ КЛАСС

import java.util.Scanner; 

    public class MeetingManager { 
public static void main(String[] args) { 

    // scanner to read the users input 
    Scanner input = new Scanner(System.in); 

    // strings to pass information about the chairperson 
    String chairpersonName; 
    String chairpersonCompany; 

    // strings to pass information about executives other 
    // than the chairperson 
    String execName; 
    String execCompany; 
    String target; 

    // holds information on whether on not an operation 
    // was successful and how many executives were removed 
    // for the remove by corporation command. 
    boolean success; 
    int numRemoved = 0; 

    // prompts the user for information about the chairperson 
    // and sets it to an executive object name chairperson 
    System.out.println("Enter the name of the chairperson: "); 
    chairpersonName = input.next(); 
    if (chairpersonName.length() < 1) { 
     System.out.println("Please enter a full name"); 
    } 
    System.out.println("Enter the company of the chairperson: "); 
    chairpersonCompany = input.next(); 
    if (chairpersonCompany.length() < 1) { 
     System.out.println("Please enter a full name"); 
    } 
    Executive chairperson = new Executive(chairpersonName, chairpersonCompany); 

    // creates a new ExecutiveList object and passes information 
    // about the chairperson 
    ExecutiveList list = new ExecutiveList(chairperson); 

    // for loop to repeatedly print the menu and take instructions 
    // from the user until they choose to exit. 
    for (int i = 1; i > 0; i++) { 
     ShowMenu(); 
     String option = input.next(); 

     // error message for improper input 
     if (option.length() > 3) { 
      System.out.println("You can only enter one option"); 
     } 

     // insert left of chairperson 
     else if (option.toUpperCase().equals("ILC")) { 
      System.out.println("Enter the executives name: "); 
      execName = input.next(); 
      System.out.println("Enter the executives company: "); 
      execCompany = input.next(); 
      Executive newGuy = new Executive(execName, execCompany); 
      list.insertLeftOfChair(newGuy); 
      System.out.println("Insertion successful."); 
     } 

     // insert left of executive 
     else if (option.toUpperCase().equals("ILE")) { 
      System.out.println("Enter the executives name: "); 
      execName = input.next(); 
      System.out.println("Enter the executives company: "); 
      execCompany = input.next(); 
      Executive newGuy = new Executive(execName, execCompany); 
      System.out.println("Enter the name of the target executive: "); 
      target = input.next(); 

      success = list.insertLeftOfExec(newGuy, target); 
      if (success == true) { 
       System.out.println("Insertion successful."); 
      } 
      else { 
       System.out.println("The executive could not be inserted."); 
      } 
     } 


     // insert right of executive 
     else if (option.toUpperCase().equals("IRE")) { 
      System.out.println("Enter the executives name: "); 
      execName = input.next(); 
      System.out.println("Enter the executives company: "); 
      execCompany = input.next(); 
      Executive newGuy = new Executive(execName, execCompany); 
      System.out.println("Enter the name of the target executive: "); 
      target = input.next(); 

      success = list.insertRightOfExec(newGuy, target); 
      if (success) { 
       System.out.println("Insertion successful."); 
      } 
      else { 
       System.out.println("The executive could not be inserted."); 
      } 
     } 

     // remove target executive 
     else if (option.toUpperCase().equals("RTE")) { 
      System.out.println("Enter the name of the executive to remove: "); 
      execName = input.next(); 
      success = list.removeTargetExec(execName); 

      if (execName.equals(chairpersonCompany)) 
       list.removeTargetExec(execName); 
      if (success) { 
       System.out.println(execName + " has been removed from the meeting."); 
      } 
      else { 
       System.out.println(execName + " could not be found."); 
      } 
     } 

     // remove by corporation 
     else if (option.toUpperCase().equals("RBC")) { 
      System.out.println("Enter the name of the corporation to remove: "); 
      execCompany = input.next(); 
      numRemoved = list.removeByCorporation(execCompany); 
      if (execCompany.equals(chairperson.getCompanyName())) { 
       System.out.println("Invalid command: cannot remove all employees from the chairperson's corporation"); 
      } 
      else if (numRemoved < 1) { 
       System.out.println("That corporation could not be found and no executives were removed."); 
      } 
      else { 
       System.out.println(numRemoved + " executive(s) from " + execCompany + " have been removed from the meeting."); 
      } 
     } 

     // prints by corporation 
     else if (option.toUpperCase().equals("PBC")) { 
      System.out.println("Enter the name of a corporation to display: "); 
      execCompany = input.next(); 
      list.printByCorporation(execCompany); 
     } 

     // prints all counter-clockwise 
     else if (option.toUpperCase().equals("PCC")) { 

      list.printAllCounterClockwise(); 
     } 

     // prints all clockwise 
     else if (option.toUpperCase().equals("PCL")) { 

      list.printAllClockwise(); 
     } 

     else if (option.toUpperCase().equals("EXT")) { 
      System.out.println("Terminating program..."); 
      break; 
     } 

     // Error message 
     else { 
      System.out.println("Please select a valid option."); 
     } 

    } 

} 



// displays menu and prompts user for input 
public static void ShowMenu() { 
    System.out.println("\nILC) Insert an executive to the left of the chairperson\nILE) Insert an executive to the left of a given executive\nIRE) Insert an executive to the right of a given executive\nRTE) Remove Target Executive"); 
    System.out.println("RBC) Remove By Corporation\nPBC) Print By Corporation\nPCC) Print all in counter-clockwise order\nPCL) Print all in clockwise order\nEXT) Exit the program\n\nSelect a menu option: "); 
} 

}

Наконец, спасибо всем, кто дает какой-либо предложения или советы или реальной помощи в любой форме, так или форме , Я знаю, что люди злятся, когда по какой-то причине видят домашние вопросы, потому что они думают, что студент просит их «сделать свою домашнюю работу для меня», но это не то, что я делаю. Мне просто нравятся любые советы или советы, я не прошу вас просто заполнить пробелы для меня и исправить все (не то, чтобы я был против этого: P). Благодарю.

+0

Было бы лучше, чтобы дать нам исключение, которое становится брошенным вместо того, чтобы сказать это сбой – Rocky

+0

консоли: Введите имя председателя: Derp Введите компанию председателя: Herp Исключения в потоке " main "java.lang.NullPointerException \t в ExecutiveList. (ExecutiveList.java:23) \t на MeetingManager.main (MeetingManager.java:41) – Dim

ответ

1

В методе removeByCorporation вы просто устанавливаете исполнительный элемент равным нулю, но, считая это двусвязным списком, не считаете ли вы, что вам нужно установить ссылки предыдущего и следующего исполнителей, чтобы список с двойной связью Не сломайся.

0

Трюк заключается в том, чтобы убедиться, что при каждой операции вы обновляете измененный элемент и два других, которые ссылаются на него (довольно удобно в двусвязном списке, два, которые ссылаются на него, также на две ссылки) ,

Проверьте каждый из ваших методов и убедитесь, что в каждом из них вы обновляете по 4 поля на одно изменение - два в теме и по одному в двух, которые связаны с объектом.

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

  • Нет связанных вопросов^_^