Sam*_*mer 29 java macos swing osx-snow-leopard
我正在尝试编写一个断言来检查用户给出的大小是否为正值,如果不是则将其设为正值,此语句位于类构造函数内部,该构造函数采用size值然后生成数组[size].我写了下面的代码,我认为是正确的.
public Grid(int size) {
try{
assert size > 0 ;
}
catch(AssertionError e){
size = Math.abs(size);
}
setLayout(new GridLayout(size, size));
grid = new JButton[size][size];
}
Run Code Online (Sandbox Code Playgroud)
虽然我似乎永远不会评估我的断言并继续该程序然后导致NegativeArraySize错误(我试图避免)
我也试过了
assert size>0;
Run Code Online (Sandbox Code Playgroud)
并且程序无法停止负值.
我最近在mac上运行java时遇到了一些问题,所以我不知道我的代码是否正确,或者它是否只是其中一个奇怪的mac怪癖!并且应该使用
size=Math.abs(size);
Run Code Online (Sandbox Code Playgroud)
谢谢山姆,
Mat*_*att 51
您需要使用-ea开关运行程序(启用断言),否则assertJVM 根本不会运行任何指令.根据断言有点危险.我建议你这样做:
public Grid(int size) {
size = Math.max(0, size)
setLayout(new GridLayout(size, size));
grid = new JButton[size][size];
}
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样:
public Grid(int size) {
if(size < 0) {
throw new IllegalArgumentException("cannot create a grid with a negative size");
}
setLayout(new GridLayout(size, size));
grid = new JButton[size][size];
}
Run Code Online (Sandbox Code Playgroud)
第二个建议的好处是可以在代码的其他部分显示潜在的编程错误,而第一个建议则默默地忽略它们.这取决于您的使用案例.
| 归档时间: |
|
| 查看次数: |
17784 次 |
| 最近记录: |