Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getter和setter还是返回方法?_Java - Fatal编程技术网

Java getter和setter还是返回方法?

Java getter和setter还是返回方法?,java,Java,在这里玩猜数字游戏,我有两种方法。我可以创建一个名为Number的对象类,然后在if语句中使用getter和setter,例如Number.setPlayerNumber,然后使用Number.getPlayerNumber,来确定获胜者 这意味着我将不需要使用静态变量,它们将只保留在方法的范围内(这样以后就不那么麻烦了?(但会使主方法看起来很混乱?…) import java.util.Random; 导入java.util.Scanner; 导入javax.swing.JOptionPane

在这里玩猜数字游戏,我有两种方法。我可以创建一个名为Number的对象类,然后在if语句中使用getter和setter,例如
Number.setPlayerNumber
,然后使用
Number.getPlayerNumber
,来确定获胜者

这意味着我将不需要使用静态变量,它们将只保留在方法的范围内(这样以后就不那么麻烦了?(但会使主方法看起来很混乱?…)

import java.util.Random;
导入java.util.Scanner;
导入javax.swing.JOptionPane;
公共类编号{
静态编号=新编号();
静态布尔赢;
公共静态void main(字符串[]args){
int cpuNumber=generateNumber();
int playerNumber=playerNumber();
打印结果();
winCondition();
}
公共静态int-generateNumber(){
System.out.println(“生成一个数字”);
System.out.println(“完成!”);
Random rand=新的Random();
int cpuNumber=rand.nextInt(10)+1;
编号:setCpuNumber(cpuNumber);
返回cpuNumber;
}
公共静态int playerNumber(){
扫描仪用户输入=新扫描仪(System.in);
String playerNum=JOptionPane.showInputDialog(null,“输入一个介于1和10之间的数字”,
“玩家回合”,JOptionPane.信息(信息);
number.setPlayerNumber(Integer.parseInt(playerNum));
返回整数.parseInt(playerNum);
}
公共静态无效打印结果(){
System.out.println(“计算机编号为:”+number.getCpuNumber());
System.out.println(“您的号码是:”+number.getPlayerNumber());
}
公共静态无效条件(){
if(number.getCpuNumber()!=number.getPlayerNumber()){
if(number.getPlayerNumber()
我也可以继续使用返回方法。这意味着我需要使每个变量都是静态的,以便在使用它们进行决策的方法中使用它们

import java.util.Random;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class NumberGuess {

    static Number number = new Number();

    static int cpuNumber = generateNumber();
    static int playerNumber = playerNumber();
    static boolean win;

    public static void main(String[] args) {


        printResults();
        winCondition();

    }

    public static int generateNumber() {
        System.out.println("Generating a number");
        System.out.println("Done!");

        Random rand = new Random();
        int cpuNumber = rand.nextInt(10) + 1;   

        return cpuNumber;
    }

    public static int playerNumber() {
        Scanner userInput = new Scanner(System.in);

        String playerNum = JOptionPane.showInputDialog(null, "Enter a number between 1 and 10",
                "Player Turn", JOptionPane.INFORMATION_MESSAGE);
        return Integer.parseInt(playerNum);
    }

    public static void printResults(){
        System.out.println("The computers number was: " + number.getCpuNumber());
        System.out.println("Your number was: " +  number.getPlayerNumber());

    }

    public static void winCondition(){

        if(cpuNumber != playerNumber()){
            if(playerNumber() < cpuNumber){
                System.out.println("You lose!\n"
                        + "Guess too low!");
                }else{
                    System.out.println("You lose!\n"
                            + "Guess too high!");
                }
        }

        if(playerNumber == cpuNumber){
            System.out.println("You have guessed correct. You win!");
        }
    }
import java.util.Random;
导入java.util.Scanner;
导入javax.swing.JOptionPane;
公共类编号{
静态编号=新编号();
静态int cpuNumber=generateNumber();
静态int playerNumber=playerNumber();
静态布尔赢;
公共静态void main(字符串[]args){
打印结果();
winCondition();
}
公共静态int-generateNumber(){
System.out.println(“生成一个数字”);
System.out.println(“完成!”);
Random rand=新的Random();
int cpuNumber=rand.nextInt(10)+1;
返回cpuNumber;
}
公共静态int playerNumber(){
扫描仪用户输入=新扫描仪(System.in);
String playerNum=JOptionPane.showInputDialog(null,“输入一个介于1和10之间的数字”,
“玩家回合”,JOptionPane.信息(信息);
返回整数.parseInt(playerNum);
}
公共静态无效打印结果(){
System.out.println(“计算机编号为:”+number.getCpuNumber());
System.out.println(“您的号码是:”+number.getPlayerNumber());
}
公共静态无效条件(){
if(cpuNumber!=playerNumber()){
if(playerNumber()
}


从良好编程实践的角度来看,什么更有效?

Q:为什么不这样做:

import java.util.Random;
...

public class NumberGuess {

   public static void main(String[] args) {
       NumberGuess numberGuess = new NumberGuess ();
       int playerNumber = numberGuess.playerNumber();
       numberGuess.printResults();
       ...

   public int playerNumber () {
      ...

   public static int generateNumber() {
      ...

我想这两个看起来都不好,伊姆霍。另外,Number对于您自己的类来说是个坏名字,因为已经有一个名为java.lang.Number的类。Christian说得对,实际上不需要所有这些静态方法。是的,它从主方法中去掉了逻辑,所以看起来不那么“混乱”,但它并不能解决您的问题,而且通常会产生意大利面代码。此外,以这种方式将逻辑分离为单独的方法也会导致编写笨拙的代码,允许这些方法在彼此之间传递信息(这就是创建这些静态变量的原因)

创建一个只封装一个数字并提供getter和setter的完整类几乎没有任何意义,如果您真的愿意,您可以使用一个简单的整数来实现这一点。但我想说,OOP的目的是将相关组件组织到一个容器中,该容器足够通用,可以重用,但不够具体,不能用于其他环境(即GUI、控制台、网络)

如果我在写它,我可能会这样做:

import java.util.*;

class GuessingGame {
    private static final Random rng = new Random();
    private int number;

    public void generateNumber() {
        number = rng.nextInt(10);
    }

    public int guess(int guess) {
        return Integer.compare(guess, number);
    }

    public int getNumber() {
        return number;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        GuessingGame game = new GuessingGame();
        game.generateNumber();
        System.out.println("Guess a number:");
        int n = sc.nextInt();
        int result = game.guess(n);
        if (result < 0)
            System.out.println("You guessed too low!");
        else if (result > 0)
            System.out.println("You guessed too high!");
        else
            System.out.println("You win!");
        System.out.println("You guessed: " + n);
        System.out.println("The actual number was: " + game.getNumber());
    }
}
import java.util.*;
班级猜谜游戏{
私有静态最终随机rng=新随机();
私有整数;
公共空生成器枚举器(){
编号=rng.nextInt(10);
}
公共整数猜测(整数猜测){
返回整数。比较(猜测、数字);
}
public int getNumber(){
返回号码;
}
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
猜游戏=新猜游戏();
game.generateNumber();
System.out.println(“猜一个数字:”);
int n=sc.nextInt();
int结果=游戏。猜测(n);
如果(结果<0)
System.out.println(“你也猜到了
import java.util.*;

class GuessingGame {
    private static final Random rng = new Random();
    private int number;

    public void generateNumber() {
        number = rng.nextInt(10);
    }

    public int guess(int guess) {
        return Integer.compare(guess, number);
    }

    public int getNumber() {
        return number;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        GuessingGame game = new GuessingGame();
        game.generateNumber();
        System.out.println("Guess a number:");
        int n = sc.nextInt();
        int result = game.guess(n);
        if (result < 0)
            System.out.println("You guessed too low!");
        else if (result > 0)
            System.out.println("You guessed too high!");
        else
            System.out.println("You win!");
        System.out.println("You guessed: " + n);
        System.out.println("The actual number was: " + game.getNumber());
    }
}