如果我不知道輸入大小,在JAVA中保持循環迭代直到它可用爲止的方法是什麼。在C++中,它可以按照以下方式完成。保持循環,直到輸入在java中可用爲止
int main(){
int val;
while(cin >> val){
//do stuff
}
}
什麼是做類似的事情(如上)在Java中
提前感謝的方式。 Shantanu
如果我不知道輸入大小,在JAVA中保持循環迭代直到它可用爲止的方法是什麼。在C++中,它可以按照以下方式完成。保持循環,直到輸入在java中可用爲止
int main(){
int val;
while(cin >> val){
//do stuff
}
}
什麼是做類似的事情(如上)在Java中
提前感謝的方式。 Shantanu
你應該嘗試以下的事情。
long val;
Scanner sc = new Scanner(System.in).useDelimiter("\n");
while (sc.hasNext()) {
String temp = sc.next().trim();
val = Long.parseLong(temp);
// do stuff
}
你的代碼拋出異常。異常線程 「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
而不是sc.nextLong()你應該使用nextXXX()來讀取你想要讀取的內容 – shem
@shem。我只是想閱讀很長時間。編輯的解決方案正在工作(以字符串形式輸入,然後長時間轉換)。謝謝。 – shantanu
根據您的具體要求,使用Scanner類中的方法。這個讀一整行。這意味着用戶必須在大多數系統中按Enter鍵。
public static void main(String[] args)
{
String str=new Scanner(System.in).nextLine();
}
一種方法是使用掃描儀。
long val;
Scanner sc=new Scanner(System.in);
while (sc.hasNextLong()) {
val = sc.nextLong();
// do stuff
}
這相當於您提供的cpp代碼。但不完全是你要求的。只要讀取字符串中有合法輸入,它就會循環。
請勿實施繁忙循環。您可能更願意使用流。流的方法read()
被阻塞,直到數據到達,讓您的代碼將是沒有空循環簡單,準確地工作,只要你想:更好地利用緩衝區
while (in.read() != -1) {
// do your stuff
}
甚至:
byte[] buf = new buf[MAX_SIZE]
while (in.read(buf) != -1) {
// do your stuff
}
亞歷克斯。你可以在**變量中初始化**嗎?我已經嘗試過使用'InputStream in = System.in;'初始化你的第一個循環,並在while循環中插入一條print語句。現在,每當我輸入時它都會打印三次。 – shantanu
我相信,以滿足您目的的最佳方式是通過多線程,其中一個線程將等待來自用戶的輸入,並讓其他線程知道什麼時候收到一個。同時另一個線程將繼續循環遍歷。
如果我正確理解你所問的是「如何保持迭代循環,直到先前聲明的變量被用戶通過命令行初始化?」對?? – WickeD