2016-05-18 57 views
0

我已經編寫了一個程序,它接受輸入(用戶鍵入或通過文本文件處理),並根據找到的內容調用數學計算。調用line.isEmpty()方法時輸出重複的答案

問題一旦出現答案並打印出來,每line.isEmpty()掃描儀檢測到它將重新計算並打印出以前的答案。如果有4個空行,它將被打印4次,直到將另一個問題解析到程序中。

這是我的主要方法:

public static void main(String[] args) { 
    Calc calc = new Calc(); 
    Scanner sc = new Scanner(System.in); 
    StringBuilder sb = new StringBuilder(); 
    String input = ""; 
    List<String> strs = new ArrayList<>(); 
    // 
    ArrayList<String> tokens; 
    //this makes sure an entire problem is added as a tokens element 
    while (sc.hasNextLine()) { 
     String line = sc.nextLine().trim(); 
     if (line.isEmpty()) { 
      for (String s : strs) { 
       sb.append(s); 
       input = sb.toString(); 
      } 
      tokens = new ArrayList<>(Arrays.asList(input.split(" "))); 
      //call calculate on strs then reset 
      calc.calculate(tokens); 
      strs.clear(); 
      tokens.clear(); 
      sb.setLength(0); 
     } else if (line.length() == 1) { 
      strs.add(" "); 
      strs.add(line); 
      strs.add(" "); 
     } else { 
      strs.add(line); 
     } 
    } 
} 

和計算方法:

public String calculate(List<String> tokens) { 
    operands = new Stack<>(); 
    for (int i = 0; i < tokens.size(); i++) { 
     tokens.removeAll(Arrays.asList("")); 
    } 
    String result = processOperands(tokens); 

    if (result.equals(null)) { 
     System.out.println(result); 
     return defaultResult; 
    } else if (result.equals("java.lang.IllegalArgumentException: Attempting to add with fewer than 2 operands.")) { 
     System.out.println(result); 
     return "java.lang.IllegalArgumentException: Attempting to add with fewer than 2 operands."; 
    } else { 
     System.out.println(result); 
     return result.replaceAll("[^\\d.]", ""); 
    } 
} 

對於輸入:

2 2 + 


4 
3 + 

輸出:

4 
4 
4 
7 

很明顯,問題在於我每次檢測到一個空字符串時都會調用它,因爲當前它是如何知道問題何時完成的「輸入」。

我該如何修改這個要麼知道不打印相同的答案兩次,要麼不計算答案,直到找到另一個答案?

+1

這已經在代碼中。 'calc.calculate(令牌); strs.clear(); tokens.clear(); sb.setLength(0);' – Alkarin

+0

到目前爲止,你已經做了什麼來弄清楚爲什麼會出現問題? – immibis

回答

1

輸入變量未在邏輯中重置。清除strs,令牌並重置'sb'變量後,設置input =「」;

+0

我的邏輯錯了,試圖做'line =「」;'而不是。謝謝! – Alkarin