java - 闯入 Java 类

标签 java class hashset

我正在尝试完成我的一门类(class)的项目,我快完成了,但遇到了问题。为此,我能够得到一些东西,但我不太确定应该如何将其分解为所需的类。

最终的项目应该有一个 GuessApp 类,该类使用处理游戏逻辑的 GuessLogic(我正确的)来运行简单的猜谜游戏。换句话说,GuessApp 类不会跟踪正确答案、猜测次数、先前猜测的数字或猜测是否合法。另一方面,GuessApp 类负责所有 I/O。换句话说,GuessLogic 类不会打印任何内容(可能出于调试目的除外)。

所以我的问题本质上是如何将代码分解为这两个类,我们还应该在 GuessLogic 类中实现一个 toString 方法,该方法返回 GuessLogic 对象的状态(即它的所有成员变量) ) 作为单个字符串。我该怎么做?

到目前为止我的代码:

package guessapp;

import java.util.HashSet;
import java.util.Scanner;

public class GuessApp {
public static void main(String[] args) {

Scanner keyboard = new Scanner(System.in);

HashSet<Integer> hs = new HashSet<>();
int GuessLogic = (int) (Math.random() * 10 + 1);

int guess;
int NumGuess = 1;
do {
    System.out.print("Enter a guess: ");
    guess = keyboard.nextInt();


    if (hs.contains(guess)) {
        System.out.println("You have already entered this number");
        continue; // this will repeat the loop
    }

    if (guess < 0 || guess > 10) {
        System.out.println("Your guess is out of the specified range. Please try again.");
        continue; // this will repeat the loop
    }

    System.out.println("Your guess is " + guess);
    if (guess == GuessLogic) {
        System.out.println("You got it right!! Congrats!! Total Number of Guesses: " + NumGuess);
        return; // this will stop the loop
    }
    else if (guess < GuessLogic) {
        System.out.println("You are wrong!!! Hint: Guess Higher, Guess number: " + NumGuess);
        NumGuess++;

    }
    else if (guess > GuessLogic) {
        System.out.println("You are wrong!!! Hint: Guess Lower, Guess number: " + NumGuess);
        NumGuess++;
    }

    hs.add(guess);

} while (true);

}
}

最佳答案

好吧,按步骤进行。

  1. 创建 GuessLogic 类,并将所有数据字段移至其中。

    public class GuessLogic {
      HashSet<Integer> hs = new HashSet<>();
      int GuessLogic = (int) (Math.random() * 10 + 1);
    
      int guess;
      int NumGuess = 1;
      ...
    
  2. 提供添加猜测的方法

     public void guess(int guess){
        this.guess=guess;
        this.NumGuess++;
        validate();
     }
    
  3. 实现验证方法。在这里你有很多选择。您可以保留当前状态的枚举,例如

    enum State {
      START,
      DUPLICATE,
      OUT_OF_RANGE,
      LOWER,
      HIGHER,
      MATCH
    }
    

验证将设置状态。

  • 然后您的应用程序查询状态并打印实际消息。

  • 或者,这会更简单,您的逻辑应该计算消息并只维护一个 boolean 值 shouldStop,应用程序将查询以了解是否应该再次提示或退出

  • 使用 toString() 方法,您可以连接所有字段值(Java API 中的大多数对象都有一个有意义的 toString()。提示:一个好的 IDE 可以从字段自动生成 toString()。

  • 希望这对您有所帮助,并且不要害怕尝试!!

    关于java - 闯入 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35798598/

    相关文章:

    c# - 内部 System.Linq.Set<T> 与公共(public) System.Collections.Generic.HashSet<T>

    c# - 为什么在 C# 中有 HashSet 而没有 Set?

    java - 如何将 JAXBelement 存储为字符串?

    java - 从另一个 Activity 获取字符串值后,我的 TextView 中不断出现空值

    c# - HashSet<T>.Contains() 对于大型列表、多线程是否高效?

    javascript - jQuery 不选择器不工作

    javascript - jQuery,根据数组检查类

    java - JavaFX 中使用事件的这些方法是否相同?

    java - 使用扫描仪检查负值

    vb.net - 使用 vb.net,如何使用没有命名空间的类?