我需要创建一个方法来检查我的数组中的每个元素,看它是真还是假,每个元素都包含一个化合物的质量,公式,面积等几个值,总共有30个化合物(所以数组有30个元素)。我需要一个算法来询问是否质量< 50和区域> 5 =是的。
我的属性类看起来像:
public void addProperty (Properties pro )
{
if (listSize >=listlength)
{
listlength = 2 * listlength;
TheProperties [] newList = new TheProperties [listlength];
System.arraycopy (proList, 0, newList, 0, proList.length);
proList = newList;
}
//add new property object in the next position
proList[listSize] = pro;
listSize++;
}
public int getSize()
{
return listSize;
}
//returns properties at a paticular position in list numbered from 0
public TheProperties getProperties (int pos)
{
return proList[pos];
}
}
在使用TheProperties中的getter / setter之后,我使用以下内容将所有信息放入数组中;
TheProperties tp = new properties();
string i = tp.getMass();
String y = tp.getArea();
//etc
theList.addProperty(tp);
然后我使用以下内容保存文件的输出;
StringBuilder builder = new StringBuilder();
for (int i=0; i<theList.getSize(); i++)
{
if(theList.getProperties(i).getFormatted() != null)
{
builder.append(theList.getProperties(i).getFormatted());
builder.append("\n");
}
}
SaveFile sf = new SaveFile(this, builder.toString());
我只是不知道如何单独询问每个化合物是否达到了这个值,读取一个文件并为每个化合物获取一个值然后保存已经有效,我可以为它写一个if语句要检查的要求,但如何实际检查每个化合物的元素是否符合要求?我想尽力说出来,我仍在研究我相当差的java技能。
答案 0 :(得分:0)
不完全确定你的目标是什么,我发现你的描述很难理解,但是如果你想看看质量是否小于50且面积大于5,那么一个简单的if语句,就像这样,做。
if (tp.getMass() < 50 && tp.getArea() > 5) {}
虽然,您将再次必须实例化tp并确保通过某种构造函数为其提供了属性。
答案 1 :(得分:0)
有很多方法可以做到这一点,这很难回答。
您可以在创建时检查,甚至不将无效的添加到列表中。这意味着你只需要循环一次。
如果您只想将输出保存到文件中,而不做其他任何事情,我建议您将读取和写入合并为一个功能。
$(".accordion").accordion({
width:"100%",
height:400,
barSize:40,
cover:true,
coverAlpha:1,
shadow:false,
shadowAlpha:1,
border:true,
borderSize:1,
borderColor:"#242424",
transitionTime:0.3,
autoplay:true,
autoplayTime:5,
changeType:"click"
});
这样做的好处是:
答案 2 :(得分:0)
如果需求发生变化,您可以编写使用Predicate<T>
的方法,这是为此类情况设计的 FunctionalInterface (在Java 8中引入了functionalInterfaces):
// check each element of the list by custom condition (predicate)
public static void checkProperties(TheList list, Predicate<TheProperties> criteria) {
for (int i=0; i < list.getSize(); i++) {
TheProperties tp = list.get(i);
if (!criteria.apply(tp)) {
throw new IllegalArgumentException(
"TheProperty at index " + i + " does not meet the specified criteria");
}
}
}
如果你想检查质量是否&lt; 50和区域&gt; 5,你会写:
checkProperties(theList, new Predicate<TheProperties> () {
@Override
public boolean apply(TheProperties tp) {
return tp.getMass() < 50 && tp.getArea() > 5;
}
}
这可以通过使用lambda表达式缩短:
checkProperties(theList, (TheProperties tp) -> {
return tp.getMass() < 50 && tp.getArea() > 5;
});