2017-08-07 176 views
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 
+0

你有一堆'if'和'else if'語句。我懷疑這是你的問題。 –

+0

歡迎來到Stack Overflow!它看起來像你需要學習使用調試器。請幫助你一些補充性的調試技術。如果您之後仍然遇到問題,請隨時返回一個顯示您的問題的[最小化,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+0

我絕對推薦你像以前的評論所建議的那樣研究一下調試器。 與此同時,看起來第一個打印語句是在此條件之後打印的:'else if(namn.equals(「prob」)&& money.equals(「」))'。在此條件之後打印第二個打印語句:'else if(namn.equals(「max」)&&!min.equals(「1」))'。 –

回答

0

我想感謝那些花時間幫助我的人,這非常有幫助!

我確實找到了這個問題的答案,它確實很簡單,我使用掃描器將文件讀入ArrayList,然後修改該開關以給我正確的輸出。