我已經在這個程序上工作了幾個星期了,這是我的Java編程課程的最後一個項目,它一直給我(和很多其他學生)一些相當好的頭痛。 我們需要創建一個程序,允許用戶輸入,顯示和刪除新飛機以及飛機的速度,高度和飛機類型。 我一直在獲取主類與其他類進行通信時遇到的最多問題。正因爲如此,我不知道我的LinkedList是否能正常工作,或者根本沒有問題。我擔心列表不會正確存儲所有字段,並且節點編碼不正確。 我真的可以使用任何幫助或建議,你可以提供。代碼如下。我願意接受任何和所有建議。代碼不必停留在與它當前所在的類完全相同的類中。如果某件事情在其他地方能夠更好地發揮作用,我很樂意嘗試它。使用LinkedList的空中交通管制程序的麻煩Java
主類。這是用戶將與該程序進行交互的地方。我一直很難從其他班級的方法在這個班級工作。我相信這是一件簡單的事,我錯過了。
package airTraffic;
import java.util.*;
public class Main {
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
do {
try {
System.out.println("Please enter command to proceed: ");
System.out.println("Enter new aircraft = e");
System.out.println("Display all aircraft = d");
System.out.println("Show specific flight = s");
System.out.println("Remove specific flight = r");
String command = in.next();
in.next(command);
if ((in.next(command)).equals("e")) {
ATControl.addToList(); // need to somehow "start" this class
} else if ((in.next(command)).equals("d")) {
ATControl.displayAll();
} else if ((in.next(command)).equals("s")){
ATControl.showFlight();
} else if ((in.next(command)).equals("r")) {
ATControl.removeFlight();
} else if ((in.next(command)).equals(null)) {
}
} catch (InputMismatchException exc) {
System.out.println("Wrong entry, please try again:");
}
} while (true);
}
}
鏈接列表和節點 - 我稱之爲飛機。我認爲這是列表存儲和創建的地方。在下一節課(ATControl)中對列表進行操作,或者至少我認爲會。
package airTraffic;
import java.util.LinkedList;
public class Aircraft {
// stores data
private static final int INITIAL_ALLOCATION = 20;
private int size = INITIAL_ALLOCATION;
//declare LinkedList and node names
static LinkedList <String> list = new LinkedList <String>();
private Aircraft head = new Aircraft();
private Aircraft tail = new Aircraft();
// tells list to add nodes
public void addNodes (int n, LinkedList<String> s) {
s = list;
head.next = tail;
tail.next = tail;
size = n;
Aircraft temp = head;
for (int i= 0; i < size; ++i) {
temp.next = new Aircraft();
temp = temp.next;
}
temp.next = tail;
}
private String value;
Aircraft craft;
public Aircraft (String v) {
value = v;
}
public Aircraft() {
}
public String get() {
return value;
}
public void set (String v) {
value = v;
}
public Aircraft next = null;
//auto generated method from ATControl
public static void add(String flight) {
// a for or while loop might be needed here. Seems to easy to just have an empty add class
}
//auto generated method from ATControl
public static void remove() {
}
}
ATControl類。這是(我認爲)列表被操縱的地方,允許用戶添加,刪除和顯示航班。
package airTraffic;
import java.util.*;
public class ATControl{
// implement Aircraft class (node) - empty argument list??
Aircraft aircraft = new Aircraft();
static Scanner in = new Scanner (System.in);
// list of planes
static String [] planeList = {"Wide-body Airliner = w", "Regional Airliner = r", "Private Plane = p",
"Military = m", "Cargo only: c", "Unknown = u"};
//add plane and details
public static void addToList() {
System.out.printf("Enter flight number: ");
String flight = in.nextLine();
Aircraft.add(flight);
//type of plane
System.out.printf("Enter type of plane, ", "Choose from: " + planeList);
String type = in.nextLine();
try {
if (type == "w") {
System.out.println("Wide-body Airliner");
}else if (type == "r") {
System.out.println("Regional Airliner");
}else if (type == "p") {
System.out.println("Private Plane");
}else if (type == "m") {
System.out.println("Military");
}else if (type == "c") {
System.out.println("Cargo only");
}else if (type == "u") {
System.out.println("Unknown");
} else type = null;
}
catch (InputMismatchException i) {
System.out.println("You must enter valid command: " + planeList);
}
Aircraft.add(type);
//plane speed
System.out.printf("Enter current speed: ");
String speed = in.nextLine();
Aircraft.add(speed);
//add Altitude
System.out.printf("Enter current altitude: ");
String alt = in.nextLine();
Aircraft.add(alt);
}
//show flight
public static void showFlight() {
System.out.printf("Enter flight number for details: ");
in.nextLine();
Aircraft.get(Aircraft, index);
}
// display all flights
public static void displayAll() {
System.out.printf("All flights: ");
}
//remove flight
public static void removeFlight() {
System.out.printf("Enter flight number to be removed: ");
in.nextLine();
Aircraft.remove();
}
}
任何想法?謝謝!
的第一條建議是進行單元測試的單獨的塊。直到您確信它是穩定的,在您嘗試將所有內容一次性合併之前運行代碼爲止,您自己與LinkedList一起工作。設計一些複雜的情景,添加,刪除等一堆航班,然後檢查列表仍然是正確的。 – mellamokb 2012-07-30 17:04:28
ATControl應該是靜態的使用它以這樣一種方式在你的主 – Alfabravo 2012-07-30 17:07:10
我給你的一般技巧...... 1)使用ArrayList 2)平面類型可以是枚舉3)不要使用兩臺掃描儀讀取System.in 4)你從in.next()中創建的字符串 - 使用它而不是調用幾十個in.next()調用...你的程序將阻塞每個人,期待輸入。 – Shark 2012-07-30 17:20:21