2016-10-22 1 views
0

그래서 빨간색 검정 나무를 만들고 트리의 빨간색 노드 비율을 결정하는 프로그램을 작성했습니다. 지금 당장 나는 그것을위한 주요 방법을 만들고있다.입력 루프 조건을 변경하면 입력 값의 절반을 건너 뜁니다.

public static void main(String[] args) { 
    Scanner s; 
    if (args.length > 0){ 
     try{ 
      s = new Scanner(new File(args[0])); 
     } catch(java.io.FileNotFoundException e){ 
      System.out.printf("Unable to open %s\n",args[0]); 
      return; 
     } 
     System.out.printf("Reading input values from %s.\n",args[0]); 
    } else { 
     s = new Scanner(System.in); 
     System.out.printf("Enter a list of non-negative integers. Enter a negative value to end the list.\n"); 
    } 
    RedBlackBST<String, Integer> st = new RedBlackBST<String, Integer>(); 
    int i = 0; 
    while ((s.hasNextInt())){ 
     int key = s.nextInt(); 
     st.put(key, i); 
     i++; 
    } 
    double percent = percentRed(); 
    System.out.println("There are " + redcount + " red nodes so"); 
    System.out.println(percent + "% of the nodes are red"); 
    } 

는 난 할 노력하고있어 "자바 RedBlackBST의 test10.txt"사용자가 입력하여 프로그램을 실행 그렇다면 정수 (의 파일 중 하나를 기반으로 트리를 만들 수 있습니다 : 그래서 여기 내가 지금 무슨이다 트리에 삽입하기 위해 10 개의 값이 포함될 것임) 또는 사용자가 파일을 지정하지 않으면 사용자가 자신의 값을 입력하고 끝에 음수 값을 입력하여 목록을 끝내라는 메시지를 표시합니다. 현재 자신의 값을 입력하면 작동하지 않지만 숫자의 .txt 파일을 전달하면 의도 한대로 정확하게 작동합니다. 이제 자신의 값을 입력에 관해서는, 나는 다음과 같이하기 위해 while 루프를 변경하는 생각 :

while ((s.hasNextInt()) && (s.nextInt()) >= 0){ 

그래서 이것은 어떻게해야 무엇 당신이 음의 값을 명중하면 값 목록을 통해 이동하고있다 목록에서 값 읽기를 중지합니다. 이 문제는 어떤 이유로 (파일을 전달하더라도) 정수로 된 배열의 값 중 절반 만 읽는다는 것입니다. 그렇다면 while 루프를 변경하면 어떻게 프로그램이 배열 값의 절반 만 읽을 수있게 되었습니까?

또한 내가 호출하는 put 메서드는 값을 트리에 삽입하는 삽입 메서드입니다.

답변

1

당신의 루프처럼 보이는 끝날 것입니다, 당신은 말 그대로 당신이 언급 한 정확한 변경 한 가정 : nextInt() 같은 물론 다른 모든 값을 생략하는, 반복에 두 번 nextInt()를 호출

while ((s.hasNextInt()) && (s.nextInt()) >= 0){ 
    int key = s.nextInt(); 
    st.put(key, i); 
    i++; 
} 

는 입력을 소비한다. , 반복 당 하나의 nextInt()을 따라서

int key; 
while ((s.hasNextInt()) && (key = s.nextInt()) >= 0){ // <- key is assigned *and* tested 
    st.put(key, i); 
    i++; 
} 

: 여기

한 일반적인 접근 방식은 조건의 범위는 가능한 누른 후 루프 외부 key를 선언 할당처럼, 한 번에 모든 것을 테스트하는 것입니다 .

+0

그러나 키가 루프 외부에서 선언되고 그 안에 아무것도 없다면 키가 초기화되지 않았다는 오류가 발생합니다. –

+0

@davidmah 루프 다음에'key'를 사용하려고했을 때만 에러가 발생합니다. 너? –

+0

그럼 while 루프에서 키가 아무 것도 지정되지 않은 경우 문제를 일으킬 빨간색 검정 나무에 키를 삽입하는 삽입 메소드를 호출합니다. 나는 스캐너의 첫 번째 값에 할당 된 키를 얻을 수만 있다면 작동 할 수 있다고 생각합니다. –

관련 문제