2013-01-20 24 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语句没有任何作用!例如,即使文本文件显示“闲置”,也没有任何事情发生!我甚至试图打印文本文件的值,它工作(它说闲置)。如果语句不能使用字符串

+0

是的,你应该真的尝试使用正确的缩进。它使这些错误很容易被发现。编辑:对于那些需要*阅读*你的代码的人来说,这也很有礼貌,如果你对它进行了很好的格式化 - 我期望这就是为什么有人早些时候低估了你 – Jeff

+0

对不起。 –

回答

6

第一个ifif ("commandline"...)里面封装了下面2个。这意味着如果第一个if的计算结果为false,则以下几个永远不会执行。

+0

+1,good spot ..... :) – 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语句中。