2012-11-27 19 views
0

我不能得到這個工作出於某種原因。我有一個讀取交易的應用程序,當輸入一個空行需要打印出一些東西時。繼續做東西,直到空行輸入

int transationCount = 0; 
    while(sc.hasNext()) 
    { 
     String trans = sc.next(); 


      String mode = trans.substring(0, 1); 
      Double amount = Double.valueOf(trans.substring(1)); 

      if(mode.equals("C")) 
      { 
       c.charge(amount); 
       ps.println(c.getBalance()); 
       transationCount = transationCount + 1; 
      } 
      else if(mode.equals("P")) 
      { 
       c.pay(amount); 
       ps.println(c.getBalance()); 
       transationCount = transationCount + 1; 
      } 
    } 
    ps.println(c.getBalance()); 
    ps.println(transationCount); 

我試圖

while(sc.hasNext() && !(sc.next().equals(""))) 

不工作。我也嘗試在while循環中添加

else if (!(trans.equals("")) {break;} 
+0

sc的類型是什麼? – djjeck

+0

Scanner sc = new Scanner(System.in); 林不知道如果這就是你問。 – Infodayne

+0

您是否需要在同一行上有多個反式字符串,或者您是否需要用戶在每個「trans」命令後按Enter鍵? – djjeck

回答

2

默認情況下,掃描程序會忽略空行,因爲它不是有效的標記。

您可以手動檢查,如果該行是空:

public static void main(String[] args) throws Exception { 
    Scanner sc = new Scanner(System.in); 

    while(true) { 
     String line = sc.nextLine(); 
     if (line.isEmpty()) { 
      System.out.println("Empty line entered"); 
     } else { 
      System.out.println("received line: " + line); 
      String[] tokens = line.split("\\s+"); 
      System.out.println("tokens: " + Arrays.toString(tokens)); 
     } 
    } 
} 
+0

那麼,如果輸入一個空行,我將如何逃避while循環? 還有別的辦法嗎? – Infodayne

1

您的掃描儀使用的是默認的分隔符(一空格)來標記輸入。 這意味着令牌的話,無論他們是在線路。

some 

word 

只返回兩個標記,正是因爲

some word 

你真正需要的是分別獲得線,以告訴哪一行是空的,哪一行包含某些東西。爲了做到這一點,使用新行作爲分隔符:

Scanner.useDelimiter("\\n"); 

或者你還不如用的BufferedReader,看BufferedReader.readLine()

請注意,在同一行上兩個詞現在將包含在同一trans字符串。您可以使用String.split方法分別獲取每個單詞。

0

那麼,如果輸入空行,我將如何逃離while循環?有另一種方法嗎? - Infodayne

可以使用標籤了/你while loop以上,並打破它,當EMPTYLINE遇到

或者您可以使用

Scanner sc = new Scanner(System.in); 
String line = sc.nextLine(); 
while(! line.isEmpty()){ 

} 

line.isEmpty()回報真正line是空的,所以條件進入while循環將變成false as now now while while while loop((true))等於(false),因此while循環不會執行。