2012-05-13 121 views
3

如果我不知道輸入大小,在JAVA中保持循環迭代直到它可用爲止的方法是什麼。在C++中,它可以按照以下方式完成。保持循環,直到輸入在java中可用爲止

int main(){ 
    int val; 
    while(cin >> val){ 
      //do stuff 
    } 
} 

什麼是做類似的事情(如上)在Java中

提前感謝的方式。 Shantanu

+0

如果我正確理解你所問的是「如何保持迭代循環,直到先前聲明的變量被用戶通過命令行初始化?」對?? – WickeD

回答

1

你應該嘗試以下的事情。

long val; 
    Scanner sc = new Scanner(System.in).useDelimiter("\n"); 
    while (sc.hasNext()) { 
     String temp = sc.next().trim(); 

     val = Long.parseLong(temp); 
     // do stuff 
    } 
+0

你的代碼拋出異常。異常線程 「main」 java.util.InputMismatchException \t在java.util.Scanner.throwFor(來源不明) \t在java.util.Scanner.next(來源不明) \t在java.util.Scanner.nextLong(未知源) \t at java.util.Scanner.nextLong(Unknown Source) – shantanu

+0

而不是sc.nextLong()你應該使用nextXXX()來讀取你想要讀取的內容 – shem

+0

@shem。我只是想閱讀很長時間。編輯的解決方案正在工作(以字符串形式輸入,然後長時間轉換)。謝謝。 – shantanu

0

根據您的具體要求,使用Scanner類中的方法。這個讀一整行。這意味着用戶必須在大多數系統中按Enter鍵。

public static void main(String[] args) 
{ 
    String str=new Scanner(System.in).nextLine(); 
} 
1

一種方法是使用掃描儀。

long val; 
Scanner sc=new Scanner(System.in); 
while (sc.hasNextLong()) { 
    val = sc.nextLong(); 
    // do stuff 
} 

這相當於您提供的cpp代碼。但不完全是你要求的。只要讀取字符串中有合法輸入,它就會循環。

0

請勿實施繁忙循環。您可能更願意使用流。流的方法read()被阻塞,直到數據到達,讓您的代碼將是沒有空循環簡單,準確地工作,只要你想:更好地利用緩衝區

while (in.read() != -1) { 
    // do your stuff 
} 

甚至:

byte[] buf = new buf[MAX_SIZE] 
while (in.read(buf) != -1) { 
    // do your stuff 
} 
+0

亞歷克斯。你可以在**變量中初始化**嗎?我已經嘗試過使用'InputStream in = System.in;'初始化你的第一個循環,並在while循環中插入一條print語句。現在,每當我輸入時它都會打印三次。 – shantanu

0

我相信,以滿足您目的的最佳方式是通過多線程,其中一個線程將等待來自用戶的輸入,並讓其他線程知道什麼時候收到一個。同時另一個線程將繼續循環遍歷。

相關問題