2017-04-24 27 views
1

我得变量grid_sizegrid_subsize和类SudokuGridSudokuGameSudokuSolverSudokuGenerator爪哇 - 更clases使用可变

Varibles首先在SudokuGrid中启动,之后我需要在剩下的类中使用它们。此刻,我在类的构造函数中传递参数等变量。例如:

public class Main extends Application { 
    public static void main (String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle("Sudoku"); 

     int grid_size = 9; 
     int grid_subsize = 3; 
     SudokuGame sudokuGame = new SudokuGame(grid_size, grid_subsize); 
    } 
} 
public class SudokuGame { 

    public SudokuGame (int grid_size, int grid_subsize) { 

     SudokuGrid sudokuGrid = new SudokuGrid(grid_size, grid_subsize); 
    } 
} 

public class SudokuGrid { 

    private int grid_size; 
    private int grid_subsize; 

    public SudokuGrid (int grid_size, int grid_subsize) { 

     this.grid_size = grid_size; 
     this.grid_subsize = grid_subsize; 
    } 
} 

public class SudokuSolver { 

    private int grid_size; 
    private int grid_subsize; 

    public SudokuSolver (int grid_size, int grid_subsize) { 
     this.grid_size = grid_size; 
     this.grid_subsize = grid_subsize; 
    } 
} 

public class SudokuGenerator { 

    private int grid_size; 
    private int grid_subsize; 

    public SudokuGenerator(int grid_size, int grid_subsize) { 
     this.grid_size = grid_size; 
     this.grid_subsize = grid_subsize; 
    } 
} 

但它看起来不太好。

我的第二个想法是使用它们像public static变量,但很多人说公共静态变量是“EVIL”。

那么,在更多类中使用一个/多个变量的最佳方式是什么?

编辑:怎么样在SudokuGame类的公共静态方法grid_sizegrid_subsize(我不需要每次创建新实例)创建。

+1

是你的变量需要治疗吗?如果没有,你可以使用文件属性! – mir

+0

它们应该在所有这些方面保持一致。我必须更多地了解这些类之间的关系。你应该是DRY:让这些类中的一个成为这些值的管家,并为所有其他客户提供读取权限。 – duffymo

+0

@duffymo其实,我在FOR语句中使用这些变量。 –

回答

1


起初。请发布其他课程。
第二,你必须为变量写getter和setter。

public int getGrid_size(){ 
return grid-size; 
} 
private int getGrid_subsize(){ 
    return grid_subsizes; 
} 

是的它的权利,你不应该使用静态变量。但是,如果你可以像创建一个工具类:

public class Utility{ 
    public static SudokuGenerator generator; 
} 

您可以通过访问该变量:

int x = Utility.generator.getGrid_Size(); 
+0

我编辑了帖子。这个比较好? –

+0

这不是推荐由Java创建公共静态变量 – Niton

+0

这就是为什么我不想创建静态变量。但是在构造函数中所有的变量看起来都很糟糕,我只需要它们用于FOR循环。 –

0

你可以这样使用它,我没有看到它的问题。在这一点上我没有看到使用静态变量的任何问题(我假设这些变量是常量),因为使用静态变量会使它成为所有类中已知的全局变量,这就是您想要的,哪个是其中之一静态目的是为了。由于主要的方法,人们称静态大多不好。在静态main方法中,你不能引用非静态方法,所以它们继续声明所有静态方法。静态的含义是,你不需要实例化一个对象来访问这个变量或方法。您始终可以通过调用类名称点变量或方法名称来访问它。

+0

@Masheshvara现在我需要他们像常量(9x9网格)。但我在想,我也可能创建6x6数独,所以变量可以更改为9或6. –

1

启动像下面

public class gridSizes{ 
    public static int grid_size = 350; 
    public static int grid_subsize = 30; 
} 

然后你可以检索类任何时候都可以通过gridSizes.grid_size或gridSizes获取值。grid_subsize

+0

并且每个人都可以更改这些值。 – Tom

+0

如果类修饰符是一个问题,请将其设置为private,并使用getter和setter.when这样做时,我们必须创建一个对象给该类,然后使用该对象来访问它。 – HemalHerath

+0

你使用逻辑选择并使它们成为'final',但这取决于你。 – Tom

0

我的想法是如下

  1. 相信班SudokuGrid,SudokuSolver和SudokuGenerator都是相互依存的。

  2. 那么,为什么不定义SudokuGame作为外部类SudokuGrid,SudokuSolver和SudokuGenerator嵌套的内部类,定义 私人诠释grid_size; private int grid_subsize;在SudokuGame类中使用 ,然后根据需要访问内部类中的两个变量。

  3. 您也可以创建嵌套静态类,但嵌套静态类只能访问外部类的静态内容。

希望有所帮助。

0

我会使用私有静态变量与公共静态Getters。

您的变量总是必须具有相同的值的所有项目......这就是什么静态变量设计。

+0

它们对于所有对象具有相同的值。 –

0

如果你想在其他类中使用grid_size和grid_subsize,你需要定义你的变量public,但是如果你不想使用静态变量,你不能使用不同的Object来访问相同的grid_subsize和grid_size的值。是我的解决方案

这里是你的公共类

public class Stackoverflow { 

public Stackoverflow(){ 
    SudokuGenerator a = new SudokuGenerator(1,2); 
    newclass b= new newclass(a); 
} 
public static void main(String[] args) { 
    new Stackoverflow(); 
}  
} 

后您初始化变量,你可以简单地将对象传递给任何其他类,因此您可以获取相同的数据。

class SudokuGenerator { 
    public int grid_size; 
    public int grid_subsize; 

    public SudokuGenerator(int grid_size, int grid_subsize) { 
    this.grid_size = grid_size; 
    this.grid_subsize = grid_subsize; 
    } 
} 

class newclass{ 
    public newclass(SudokuGenerator a){ 
     System.out.println("grid_size and grid_subsize in newclass " + a.grid_size + ", "+a.grid_subsize); 
    } 
+0

这些变量不应该是私人的吗? –

+0

好吧,如果你定义它们是私人的,那么你必须定义一个Getter方法来返回变量,我自己更喜欢使用静态变量 – Hasan