파일을 읽는 프로그램을 작성했습니다. 파일을 올바르게 읽습니다. 나는 print 서술문을 사용하여 테스트했다. 그러나 파일의 마지막 줄을 읽은 후 프로그램이 멈추지 않습니다. 그것은 무한 루프로 진행됩니다. 내 while
루프가 공백 문자를 다음 줄로 계속 읽는 것 같습니다. 나는 그것을 고치는 법을 모른다.자바, 파일 리더, 무한 루프로 들어가기
else
부분에 break
을 넣으면 첫 번째 줄을 읽고 while
루프에서 벗어납니다. 왜 그런지 모르겠습니다.
도와주세요. 마지막으로 다른 블록이 실제로 선을 소비하지 않습니다
public static void InterpretMessageFromFile() throws FileNotFoundException{
File inputfile = new File("FilePath");
Scanner reader = new Scanner(inputfile);
try
{
while (reader.hasNextLine())
{
//if the type of order is add order to existing Order Book
if (reader.hasNext("A")){
reader.next();
String retrieve_ts = reader.next();
int ts = Integer.parseInt(retrieve_ts);
//int ts = Integer.parseInt(retrieve_ts, 2); //for binary file
String retrieve_id = reader.next();
int id = Integer.parseInt(retrieve_id);
//int id = Integer.parseInt(retrieve_id ,2); // for binary file
String or_side = reader.next();
String retrieve_share = reader.next();
int share = Integer.parseInt(retrieve_share);
// int share = Integer.parseInt(retrieve_share, 2); //for binary file
String retrieve_price = reader.next();
int price = Integer.parseInt(retrieve_price);
//int price = Integer.parseInt(retrieve_price, 2); //for binary file
System.out.println("Add Order : Id is " + id);
AddOrderToExistingBook.AddNewOrder(id, ts, or_side, share, price);
}
//if it is cancel order
else if (reader.hasNext("X")){
reader.next();
String retrieve_ts = reader.next();
int ts = Integer.parseInt(retrieve_ts);
//int ts = Integer.parseInt(retrieve_ts, 2); //for binary file
String retrieve_id = reader.next();
int id = Integer.parseInt(retrieve_id);
System.out.println("Cancel Order : Id is " + id + " time stamp is : " + ts);
//int id = Integer.parseInt(retrieve_id, 2); //for binary file
//String retrieve_share = reader.next();
// int share = Integer.parseInt(retrieve_share, 2); // need to add back later, removing it for testing purposes
CancelOrder.CancelPartOfOrder(id, ts);
}
//if it is delete order
else if (reader.hasNext("D")){
reader.next();
String retrieve_ts = reader.next();
int ts = Integer.parseInt(retrieve_ts, 2);
String retrieve_id = reader.next();
int id = Integer.parseInt(retrieve_id, 2);
DeleteOrder.DeleteOrderFromBook(id, ts);
}
else{
// unexpected token.
// basically log as info and ignore.
}
}
}
finally
{
reader.close();
}
}
의 중복 가능성 [? 자바 기본 콘솔 프로그래밍 - 콘솔에서 입력을 읽을 hasNextLine을 사용할 수 있습니다 (http://stackoverflow.com/questions/5048290/java-basic-console-programming- can-use-hasnextline-to-read-inputs-from-console) – duffymo
'else'에 있다면 라인을 실제로 사용하지 않는 것처럼 보입니다. 그래서'reader.hasNextLine()'은 당신이 전진하지 않기 때문에 항상 true입니다. –
네, 그게 사실이라고 생각합니다. 나는 else 부분에 break 문을 넣는 것을 시도했다. 그러나 그것은 효과가 없습니다. 어떻게 해결할 수 있습니까? – user2942227