1
我想將這個.txt文件轉換爲SQL查詢,我可以讀入SQLite數據庫,問題是我無法在需要時打印出我需要的信息。解析文本文件
該代碼的問題在於,它將在到達prob屬性時打印出來,然後在到達min/max屬性時再次打印同一行,只是這次使用文件中找到的正確值。
只有1項與此ID,但它打印兩次:
0908100 ItemID: 2060000 Prob: 0.108 Min: 1 Max: 1
0908100 ItemID: 2060000 Prob: 0.108 Min: 10 Max: 20
整個文件的結構正確因此應始終遵循相同的模式,所以當它達到「概率」我一直在努力尋找一種方法來檢查下一個值是最小/最大值,如果它不打印,否則打印後讀取最小/最大值,我一直無法。
我從節目想會是這樣的,當它找到一個最小/最大屬性的輸出:
INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max);
VALUES (0908100, 2060000, 0.108, 10, 20);
如果沒有最小值/最大值後概率,然後在同一行應該是這樣的,而不是:
INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
VALUES (0908100, 2060000, 0.108, 1, 1);
錢總是itemID 0,最小/最大值默認爲貨幣值。 so:
INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
VALUES (0908100, 0, 0.65, 87, 87);
。
public static void main(String[] args) throws FileNotFoundException {
int radNmr = 0;
String mobID = "";
String money = "";
String item = "";
String prob = "";
String min = "1";
String max = "1";
Scanner sc = new Scanner(new File("Monster_Drops1.txt"));
while (sc.hasNext()) {
String namn = sc.next();
String namn1 = sc.next();
if ("m".equals(namn.substring(0, 1)) && !"money".equals(namn) && !"max".equals(namn) && !"min".equals(namn)) {
mobID = namn.substring(1);
}
switch(namn) {
case "money":
money = namn1;
break;
case "item":
item = namn1;
break;
case "prob":
if (!money.equals("")) {
money = "";
break;
} else if (money.equals("")){
prob = namn1;
System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
break;
}
case "max":
if (min.equals("1")) {
max = namn1;
break;
} else if (!min.equals("1")) {
max = namn1;
System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
max = "1";
min = "1";
break;
}
case "min":
if (max.equals("1")) {
min = namn1;
break;
} else if (!max.equals("1")) {
min = namn1;
System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
break;
}
}
}
}
的Monster_Drops1.txt進來這種格式,在開始/結束標記後的怪物ID沒有意義,我只是添加它,因爲掃描儀在我拋出錯誤時,該行只有一個值。
m0908100 Start
money 87
prob 0.65
item 2340802
prob 0.4
item 2640002
prob 0.1
item 2040002
prob 0.00003
item 2041001
prob 0.00003
item 2060000
prob 0.54
min 10
max 20
item 9010000
prob 0.98
m0740101 end
money 80
prob 0.55
item 6050000
prob 0.9
item 2041006
prob 0.00003
item 3014000
prob 0.41
你有一堆'if'和'else if'語句。我懷疑這是你的問題。 –
歡迎來到Stack Overflow!它看起來像你需要學習使用調試器。請幫助你一些補充性的調試技術。如果您之後仍然遇到問題,請隨時返回一個顯示您的問題的[最小化,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –
我絕對推薦你像以前的評論所建議的那樣研究一下調試器。 與此同時,看起來第一個打印語句是在此條件之後打印的:'else if(namn.equals(「prob」)&& money.equals(「」))'。在此條件之後打印第二個打印語句:'else if(namn.equals(「max」)&&!min.equals(「1」))'。 –