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 ステートメントはどれも機能しません。たとえば、テキスト ファイルに "idle" と表示されていても、何も起こりません! テキストファイルの値を印刷しようとしたところ、うまくいきました(アイドルと言いました)。

4

3 に答える 3

6

最初のif:if ("commandline"...)は、次の 2 つを内部にカプセル化します。これは、最初のものが にif評価された場合false、次のものは決して実行されないことを意味します。

于 2013-01-20T22:15:45.777 に答える
3

これは、2 番目と 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"、この部分全体が実行されません。

于 2013-01-20T22:16:51.613 に答える
1

文字列の比較に compareTo を使用するのはなぜですか? 文字列クラスには同等のメソッドがあります - equals() または equalsIgnoreCase()

do-while ループの外で URL オブジェクトを作成する必要があります。プログラムがループするたびに、c および cinfo オブジェクトが再作成されます。つまり、各ファイルの最初の行だけが参照されます。

また、他の人が述べているように、最初の if ステートメントにカプセル化されているため、2 番目の 2 つの if ステートメントは決して実行されません。

于 2013-01-20T22:34:44.570 に答える