2013-01-20 5 views
0
import java.net.*; 
import java.io.*; 
import java.util.*; 
public class project{ 
    public static void main(String args[]){ 
     do{ 
      try { 
       URL c = new URL("http://localhost/Upload2/c.txt"); 
       URL cinfo = new URL("http://localhost/Upload2/cinfo.txt"); 
       Scanner c2 = new Scanner(c.openStream()); 
       Scanner cinfo2 = new Scanner(cinfo.openStream()); 
       String c3 = c2.nextLine(); 
       String cinfo3 = cinfo2.nextLine(); 
       if ("commandline".compareTo(c3) == 0){ 
        Runtime.getRuntime().exec(cinfo3); 
        if ("idle".compareTo(c3) == 0){ 
         System.out.println("Waiting for a command."); 
        } 
        if ("print".compareTo(c3) == 0){ 
         System.out.println(cinfo3); 
        } 
       } 
      } 
      catch(IOException ex) { 
       ex.printStackTrace(); 
      } 
     } while(true); 
    } 
} 

이것은 현재 코드입니다. 그러나 if 문 중 아무 것도 작동하지 않습니다! 예를 들어, 텍스트 파일이 "유휴"라고해도 아무 일도 일어나지 않습니다! 텍스트 파일의 값을 인쇄하려고 시도해도 작동했습니다 (유휴 상태).If 문이 문자열로 작동하지 않습니다.

+0

그래, 정말로 들여 쓰기를 시도해야합니다. 그것은 이러한 실수를 간단하게 만듭니다. 편집 : 그것은 친절한 사람들에게도 친절합니다. * 당신이 그것을 멋지게 꾸민다면 * 코드를 읽어야합니다. - 나는 누군가가 당신을 먼저 downvoted했던 이유라고 생각합니다. – Jeff

+0

죄송합니다. –

답변

6

첫 번째 if : if ("commandline"...)은 다음 2 개를 내부에 캡슐화합니다. 즉, 첫 번째 iffalse으로 평가되면 다음과 같은 사항이 실행되지 않습니다.

+0

+1, 좋은 자리 ..... :) – PermGenError

+1

이 질문은 코드를 들여 쓰는 것이 중요하다는 것을 나타냅니다. +1 – MrLore

+0

그래, 코드 들여 쓰기를 수정하는 중 ... 이걸 발견 했어. – Jeff

3

두 번째 및 세 번째 if 문은 첫 번째 문장 아래에 중첩되어 있기 때문입니다. 여기에 고정 들여 쓰기, 관련 부분 :

if ("commandline".compareTo(c3) == 0){ 
    Runtime.getRuntime().exec(cinfo3); 
    // here, we're still inside first if! 
    if ("idle".compareTo(c3) == 0){ 
    System.out.println("Waiting for a command."); 
    } 
    if ("print".compareTo(c3) == 0){ 
    System.out.println(cinfo3); 
    } 
} 

따라서, c3 != "commandline" 경우,이 모든 부분이 실행되지 않습니다.

1

왜 compareTo를 사용하여 문자열을 비교합니까? 문자열 클래스에는 equals() 또는 equalsIgnoreCase()와 비슷한 메서드가 있습니다.

do-while 루프 외부에서 URL 객체를 만들어야합니다. 프로그램이 반복 할 때마다 c 및 cinfo 객체를 다시 작성합니다. 즉, 각 파일의 첫 번째 줄만보고 있습니다.

다른 사람이 말했듯이 두 번째 두 if 문은 첫 번째 if 문에서 캡슐화 될 때 절대로 실행되지 않습니다.

관련 문제