【问题标题】:If statements not working with strings [closed]如果语句不适用于字符串[关闭]
【发布时间】:2013-01-20 22:12:21
【问题描述】:
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 语句都不起作用!例如,即使文本文件显示“空闲”,也没有发生任何事情!我什至尝试打印文本文件的值并且它有效(它说空闲)。

【问题讨论】:

  • 是的,你真的应该尝试使用适当的缩进。这样的错误很容易被发现。编辑:如果你的格式很好,这对 SO 上必须阅读你的代码的人来说也是一种礼貌 - 我希望这就是为什么有人早些时候对你投了反对票

标签: java string if-statement


【解决方案1】:

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

【讨论】:

  • 这个问题表明正确缩进代码的重要性。 +1
  • 是的,我在修复代码缩进的过程中发现了这个......
  • 谢谢(这就是问题所在)。对缩进感到抱歉。
  • 不客气。其他建议:不要使用一段时间(真)。如果满足某些条件,给它一个停止的机会。
  • 事故。我试图接受这两个合法的答案(我是新来的)。我重新接受了。
【解决方案2】:

这是因为第二个和第三个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",则不执行整个部分。

【讨论】:

    【解决方案3】:

    为什么要使用 compareTo 来比较字符串? string 类有一个类似的方法——equals() 或 equalsIgnoreCase()

    您应该在 do-while 循环之外创建 URL 对象。每次程序循环时,它都会重新创建 c 和 cinfo 对象,这意味着它只会查看每个文件的第一行。

    另外,正如其他人所说,后两个 if 语句永远不会被执行,因为它们被封装在第一个 if 语句中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多