我在Java编程方面很陌生,我试图完成这个软件包,但我似乎没有把它做对。我需要找到的是我调用的对象是否在范围内,例如,如果我有行0到3和列1到2的DataEntry对象,你调用方法inRange,这个范围有row = 2,column = 1,它应该返回true,因为行(2)介于0和3之间,而列(1)介于(1和2)之间。我尝试过不同的代码,而我现有的代码是我认为最好的选择,然而,当我测试它时,它给了我错误。如果我有DataEntry entry = new DataEntry(2,4,8.88);然后它应该返回true为(entry.inRange(3,5,2,4)返回true为(entry.inRange(5,4,2,5)返回false为(entry.inRange(5,4,3,5) )为(entry.inRange(0,0,2,3)
返回falseprivate int row, column;
private double value;
public DataEntry(int r, int c, double val) {
setRow(r);
setColumn(c);
value = val;
}
public void setRow(int r) {
row = Math.max(0, r);
}
public void setColumn(int c) {
column = Math.max(0, c);
}
public void setValue(double val) {
value = val;
}
public int getRow() {
return row;
}
public int getColumn() {
return column;
}
public double getValue() {
return value;
}
//DO NOT MODIFY ANY CODE ABOVE THIS COMMENT
/**
* @param row1
* @param column1
* @param row2
* @param column2
* @return true if the current item is in the range provided
* i.e., between rows row1 and row 2 (inclusive) and between
* columns column1 and column2 (inclusive), false otherwise
*/
public boolean inRange(int row1, int column1, int row2, int column2) {
if (this.row <row1){
return false;
}
if (this.row>row2 )
return false;
}
if (this.column <column1) {
return false;
}
if (this.column> column2){
return false;
}
return true;
//this is my code
}
}
答案 0 :(得分:1)
如果从稍微不同的方向处理问题,您可以为代码添加很多清晰度(并使调试更容易)。
这样的事情可以帮助您追踪问题。
public boolean inRange(int row1, int column1, int row2, int column2) {
// Rows first.
if ( row < row1 ) {
return false;
}
if ( row > row2 ) {
return false;
}
// Then columns.
if ( column < column1) {
return false;
}
if ( column > column2) {
return false;
}
// Everything is in range.
return true;
}
注意我是如何颠倒逻辑而不是为你正在寻找的情况构建一个复杂的布尔表达式true
,我在外出时通过返回false
来消除不良状态边界。
注意:我使用的比较可能是也可能不正确,但至少你应该能够更容易地解决出错的问题。