【问题标题】:printing a toString() method output in a test class在测试类中打印 toString() 方法输出
【发布时间】:2015-05-20 06:28:32
【问题描述】:

大家好,我一直在为我的文字益智游戏制作一个测试类,输出是将对象参考号打印到对象。任何人都得到了打印对象返回语句的解决方案。

输出:

生成器统计信息:从长度为 3 的单词生成的单词拼图 Puzzle.WordPuzzleGenerator @ c68c3Puzzle.WordPuzzleGenerator @ b2002fPuzzle.WordPuzzleGenerator @ 2a4983Puzzle.WordPuzzleGenerator @ 406199Puzzle.WordPuzzleGenerator @ c7b00cPuzzle.WordPuzzleGenerator @ 1f6f296Puzzle.WordPuzzleGenerator @ 1df5a8fPuzzle.WordPuzzleGenerator @ b2a2d8Puzzle.WordPuzzleGenerator @ 1e13d52Puzzle.WordPuzzleGenerator @ 80fa6f P>

测试类

public class Test_WordPuzzleGenerator {
    public static void main(String[] args) throws FileNotFoundException {

        int sizeTest1 = 3;
        System.out
                .println("Generator stats: word-puzzles generated from words of length "
                        + sizeTest1);

        for (int i = 0; i < 10; i++) {
            WordPuzzleGenerator puzzle = new WordPuzzleGenerator(sizeTest1);
            System.out.print(puzzle);
        }

        int sizeTest2 = 3;
        System.out
                .println("Generator stats: word-puzzles generated from words of length "
                        + sizeTest2);
        for (int i = 0; i < 10; i++) {
            new WordPuzzleGenerator(sizeTest2);
        }
    }
}

主程序:

public class WordPuzzleGenerator {
    static ArrayList<String> wordList = new ArrayList<String>();

    public WordPuzzleGenerator(int size) throws FileNotFoundException {
        ArrayList<String> puzzleListY = new ArrayList<String>();
        ArrayList<String> puzzleListX = new ArrayList<String>();
        String randomXWord;
        String letterSize = "" + size;
        makeLetterWordList(letterSize);
        boolean finished = false;
        while ( !finished ) {
            finished = true;
            puzzleListX.clear();
            puzzleListY.clear();
            for (int i = 0; i < size; i++) {
                int randomYWord = randomInteger(wordList.size());
                String item = wordList.get(randomYWord);
                puzzleListY.add(item);
            }
            for (int i = 0; i < puzzleListY.size(); i++) {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < puzzleListY.size(); j++) {
                    sb.append(puzzleListY.get(j).charAt(i));
                }
                randomXWord = sb.toString();
                if (!wordList.contains(randomXWord) && !puzzleListY.contains(randomXWord)) {
                    finished = false;
                    break;
                }
                puzzleListX.add(randomXWord);

            }




        }
        toString(puzzleListX, puzzleListY);
    }

    public static int randomInteger(int size) {
        Random rand = new Random();
        int randomNum = rand.nextInt(size);
        return randomNum;
    }



    public static void makeLetterWordList(String letterSize) throws FileNotFoundException {

        Scanner letterScanner = new Scanner( new File (letterSize + "LetterWords.txt"));
        wordList.clear();
        while (letterScanner.hasNext()){
            wordList.add(letterScanner.next());
        }
        letterScanner.close();
    }

    public static String toString(ArrayList<String> ArrayList1, ArrayList<String> ArrayList2){
        StringBuilder group1 = new StringBuilder();
        for (int i = 0; i < ArrayList1.size(); i++) {
            group1.append(ArrayList1.get(i) + " ");
        }
        String wordsInString1 = group1.toString();

        StringBuilder group2 = new StringBuilder();
        for (int i = 0; i < ArrayList2.size(); i++) {
            group2.append(ArrayList2.get(i) + " ");
        }
        String wordsInString2 = group2.toString();

        return String.format("\t( %s) ( %s)", wordsInString1, wordsInString2);
    }
}

【问题讨论】:

  • 你的主程序只是一个对象,你的测试是主程序,你把它弄混了

标签: java arraylist tostring


【解决方案1】:

您的WordPuzzleGenerator 类不会覆盖ObjecttoString。相反,它包含一个具有不同签名的静态 toString 方法。

您需要在 WordPuzzleGenerator 类中使用此签名的方法:

@Override
public String toString()
{
    ...
}

再看一遍后,你的WordPuzzleGenerator 似乎只有静态方法,没有实例成员,所以不清楚你期望toString 返回什么,或者换句话说 - 不清楚System.out.print(puzzle); 期望什么打印。

编辑:

如果您希望toString() 打印在您的构造函数中创建的列表,您应该将它们设为实例成员:

ArrayList<String> puzzleListY;
ArrayList<String> puzzleListX;
public WordPuzzleGenerator(int size) throws FileNotFoundException {
    puzzleListY = new ArrayList<String>();
    puzzleListX = new ArrayList<String>();
    ...
}

然后你可以像这样覆盖 toString :

@Override
public String toString()
{
    return WordPuzzleGenerator.toString (puzzleListX,puzzleListY);
}

【讨论】:

  • 我希望 toString 返回两个数组内容的字符串版本
  • @Jackson 这就是您的静态 toString 方法似乎正在做的事情,但是当您编写 System.out.print(puzzle); 时,这不是被调用的方法。您可以使用System.out.print(WordPuzzleGenerator.toString(list1,list2)) 显式调用它,但您必须将列表传递给它。如果要打印在 WordPuzzleGenerator 构造函数中声明的列表,则应将这些列表更改为实例变量而不是局部变量。
  • @Jackson 类似,但不应该是静态的。
  • 哦,我现在明白了,感谢您的帮助,它现在正在工作。
【解决方案2】:

您必须重写对象的 toString 方法,因为您的对象继承自 java 对象

@Override
public String toString(){
\\mystring build up...
return mystring;

注意覆盖注释,这就是诀窍;) 快乐编码!

【讨论】:

  • 那么我如何引用overide toString 方法插入到我的主toString 中?
  • tostring 在对象中被覆盖,在 main 中当你去 system.out.print(myobject) java 调用那个 toString 方法。
  • 正如另一个答案所暗示的那样,您的对象中没有任何 toString,
【解决方案3】:

尝试在您的类中覆盖“toString”方法,如下所示:

@Override
public String toString()
{
    //your code
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多