Word Scramble游戏不会将用户猜测与原始单词Java相比较

时间:2015-12-05 16:17:51

标签: java

大家好,我无法让我的程序将用户猜测与从文件中读取的原始单词进行比较。我知道这有很多问题,而且目前还不过分,但任何帮助都会非常感激。基本上类userGuess应该从文件“Words.txt”读取一个随机单词,然后它应该采取它在ScrambleWord方法中挑选和加扰的单词,并显示加扰的单词。接下来它应该询问用户他们的猜测,并使用compareGuess方法将其与原始单词进行比较,并告诉用户他们是对还是错。

这是我的班级

import java.io.*;
import java.util.Random;
import java.util.Scanner;
public class userGuess 
{
private String guess;
private String word;
private String answer;
public userGuess()
{
    guess = "";
    word="";
    answer="";
}

public String getWord()
{
    try
    {
        Random r = new Random();
        File file = new File("Words.txt");
        Scanner inputFile = new Scanner(file);
        while (inputFile.hasNext())
        {
            word = inputFile.nextLine();
        } 
    inputFile.close();
    }
    catch (IOException IOError)
    {
        word="Error" + IOError;
    }
    return word;
}

//Scamble Word
public String ScrambleWord(Random rn, String sWord)
{
    char a[] = sWord.toCharArray();

    // Scramble the letters  
    for( int i=0 ; i<a.length-1 ; i++ )
    {
        int j = rn.nextInt(a.length-1);
        // Swap letters
        char temp = a[i]; a[i] = a[j];  a[j] = temp;
    }       

    return new String( a );   

}

public String userGuess()
{
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter Guess here: ");
    guess = keyboard.nextLine().toUpperCase();
    return guess;
}    

public String compareGuess()
{
    if ( guess.equalsIgnoreCase(word))
    {
        System.out.println("Winner");
    }
    else if(guess != word)
    {
        System.out.println("Try Again");
    }
    return "";
}
}

这是我的主要课程

import java.io.*;
import java.util.Random;
import java.util.Scanner;
//import com.WordScramble.MacLean.ScrambleWord;
import com.WordScramble.MacLean.userGuess;
public class WordGame 

{   
public static void main(String[] args) throws IOException
{
// Declare Variables
    String word="";
    String wordCopy="";
    Random r = new Random();
    File file = new File("Words.txt");
    Scanner inputFile = new Scanner(file);
    word = inputFile.nextLine();
    wordCopy = inputFile.nextLine();
    //System.out.println(word);  

    //get scrambled word
    userGuess sWord = new userGuess();
    System.out.println(sWord.ScrambleWord(r, word));

    //get user guess
    userGuess uGuess = new userGuess();
    System.out.println(uGuess.userGuess());

    //compae user guess
     userGuess compare = new userGuess();
     System.out.println(compare.compareGuess());


}

}

问题是,当我进入用户猜测它总是告诉我即使它错了也是对的,再次任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

首先,你的代码有一些问题。您的计划始终接受,因为您的比较&#34;是使用userGuess的新实例完成的。 调用

//compae user guess
userGuess compare = new userGuess();
System.out.println(compare.compareGuess());

使用构造函数

创建类的新实例
public userGuess()
{
    guess = "";
    word="";
    answer="";
}

因此所有变量都包含空字符串。与您的方法比较

guess.equalsIgnoreCase(word)

结果

"".equalsIgnoreCase("")

总是如此。

你也正在用一个新的userGuess实例读取你的用户猜测,这会导致你将猜测保存在另一个对象中,而不是用来加扰你的单词或用于比较的对象。

//get user guess
userGuess uGuess = new userGuess();
System.out.println(uGuess.userGuess());

此外,您正在程序的主要方法中阅读您的单词而不是在userGuess的任何实例中保存它,因此您的userGuess对象都不包含输入单词。

每次都必须使用相同的对象。所以尝试像

这样的东西
userGuess guess = new userGuess();
System.out.println(guess.scramble(r, guess.getWord()));
System.out.println(guess.userGuess());
System.out.println(guess.compareGuess());