2017-03-02 4 views
2

ArrayList에 사용자가 입력 한 값을 인쇄하는 프로그램을 만들려고했는데 대부분 작동합니다. 단, 첫 번째 요소는 인쇄되지 않습니다. 첫 번째 요소는 제 x= in.nextLine();하고 결코이 소비되기 때문에 내가 잭을 입력하면Java : 스캐너가있는 배열 목록 : 첫 번째 요소가 인쇄되지 않습니다.

import java.util.Scanner; 
import java.util.ArrayList; 
public class Family { 
    public static void main(String[] args){ 
     ArrayList<String> names=new ArrayList<String>(); 
     Scanner in=new Scanner(System.in); 
     System.out.println("Enter the names of your immediate family members and enter \"done\" when you are finished."); 
     String x=in.nextLine(); 
     while(!(x.equalsIgnoreCase("done"))){ 
      x = in.nextLine(); 
      names.add(x); 

     } 
     int location = names.indexOf("done"); 
     names.remove(location); 
     System.out.println(names); 
    } 
} 

예를 들어, 밥, 샐리, 그것은 [샐리, 밥]

+2

참고로 2 단계'indexOf()'와'remove()'는 필요하지 않습니다. 'names.remove ("done")'이 트릭을 할 것입니다. – shmosel

+0

사용자가 답변을 제공해 주셨습니다. –

답변

0

를 인쇄 할 수 있습니다 : 여기에 코드입니다 목록에 추가했습니다.

이 시도 : 당신이 while loop를 입력으로는 분실, 그래서 다시, 첫 번째 입력을 저장하지 않고 x=in.nextLine();를 호출하기 때문에 while loop 외부

System.out.println("Enter the names of your immediate family members and enter \"done\" when you are finished."); 
     String x=""; 
     while(!(x.equalsIgnoreCase("done"))){ 
      x = in.nextLine(); 
      names.add(x); 

     } 
1
String x=in.nextLine(); 

이 줄을 먼저 입력을 소비한다. 따라서 인쇄되지 않습니다. ArrayList에 있지 않습니다.

while loop 앞에 포함 된 String x=in.nextLine(); 만 제거하면 코드가 정상적으로 작동합니다. 당신이 루프를 입력 할 때

String x=""; 

System.out.println("Enter the names of your immediate family members and enter \"done\" " + 
"when you are finished."); 

while(!(x.equalsIgnoreCase("done"))){ 
    x = in.nextLine(); 
    names.add(x); 
} 
4

당신은 그 과정에서 이전에 입력 된 라인을 잃고, 즉시 nextLine()를 호출하고 있습니다. 당신은 추가로 값을 읽기 전에 그것을 사용한다 :

while (!(x.equalsIgnoreCase("done"))) { 
    names.add(x); 
    x = in.nextLine();    
} 

편집 :
이, 물론, "done"names에 추가되지 않음을 의미하므로 다음 줄, 그들이 제거해야합니다

int location = names.indexOf("done"); 
names.remove(location); 
+0

이 작동하지 않습니다. –

+2

@EduardoDennis 확실합니다. – shmosel

+0

@shmosel 그것은 arrayIndexOutofBounds를 제공합니다. 방금 시도했습니다. 그가 name.remove를하고있는 라인을 봐라. 인덱스는 배열리스트의 크기보다 더 높을 것이다. –