检查我的数组元素是否符合要求

时间:2016-01-20 09:29:30

标签: java arrays if-statement boolean

我需要创建一个方法来检查我的数组中的每个元素,看它是真还是假,每个元素都包含一个化合物的质量,公式,面积等几个值,总共有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技能。

3 个答案:

答案 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"
});

这样做的好处是:

  1. 你只能循环一次,而不是三次,所以它更快
  2. 您永远不必将整个列表存储在内存中,因此您可以处理包含数千个元素的大型文件。

答案 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;
});