Java循环用字符串输入替换隐藏的单词

时间:2017-11-05 01:18:41

标签: java arrays string

我正处于Java课程的开始阶段。最后的任务是创建一个Hangman游戏。规则:用星号替换隐藏的单词,然后用户有10次尝试猜测单词。每次正确的猜测,我们需要替换星号,因此它看起来像这个d * n **。

我在创建一个检查字符串的字符串的循环时出错,然后用正确的字母替换字符串。我应该使用String,char []数组或String []数组吗?任何指导都会受到很多赞赏。

lon=34.4
lat=22.1
cdo daymean -remapnn,lon=${lon}/lat=${lat} input.nc output_${lon}_${lat}.nc

1 个答案:

答案 0 :(得分:-1)

最初,它会出现如下所示的问题:

else if (!(chars[i] == letterTrim))

这是一个问题,原因有两个:

  1. 您正在将Character值与String值进行比较,两者是不同的变量类型
  2. 字符串是对象,需要使用.equals()方法
  3. 这里有更好的东西,比如

    for (int i = 0; i < chars.length; i++) {
        String letter = Character.toString(chars[i]);
        if (letter.equals(letterTrim)) {
         ...
        } else if (!letter.equals(letterTrim)) {
         ...
        }
    }
    

    在上面的代码中,Character值被转换为String,允许您将letter的值与letterTrim的值进行比较。

    在Java中,字符串是对象,需要使用.equals()方法来计算相等性而不是==运算符。一个例外是检查String是否为null。然后你需要像这样使用==运算符:

    String name = null;
    
    if ( name == null ) {
        System.out.println("variable name is null.");
    }
    

    我还应该补充一点,如果它是完全相同的对象引用,则使用对象断言的==运算符,并且使用赋值运算符=将复制对象引用而不是整个对象。举个例子:

    String lastName = "Doe";
    String otherLastName = lastName;
    
    if ( lastName == otherLastName ) {
        System.out.println("lastName and otherLastName reference the same object");
    }
    

    希望有所帮助!

    更多信息

    评论中指出了以下例子:

    String name = "Mike";
    
    if ( name == "Mike" ) {
        System.out.println("Same object reference");
    }
    

    这将在if语句中打印该行。这是因为引用了相同的对象。也就是说&#34; Mike&#34;是与变量 name 相同的对象的引用。创建一个字符串对象,并将其引用分配给该行上的变量 name

    String name = "Mike";
    

    但是,以下内容将创建一个新的String对象:

    String name = "Mike";
    String otherName = new String("Mike");
    
    if ( name != otherName ) {
        System.out.println("Different Objects");
    }
    
    if ( name == "Mike" ) {
        System.out.println("\"Mike\" is the same Object reference as name.");
    }
    
    if ( name.equals(otherName) ) {
        System.out.println("The contents of name and otherName are equal");
    }
    

    上面会产生不同的对象&#39;&#39;&#34;迈克&#34;是与名称&#39;相同的对象引用,&#39; name和otherName的内容相等&#39;。构造函数的使用将产生(如预期的那样)一个新的String对象,尽管它的内容是相同的。这就是使用.equals()方法非常重要的原因。