将一类的方法传递给另一类

时间:2017-04-23 20:09:22

标签: java arrays

我的问题是我需要从Element类中获取符号。 我通常会在PeriodicTable中建立一个对象,如下所示: 元素e =新元素(); 然后在方法中使用e.getSymbol以便将其用于比较。

因此,为了完成第一个任务并打印整个元素列表,我在PeriodicTable中声明了一个数组,如下所示: Element [] objects = new Element [ARRAY_SIZE]; 我猜测我是正确的,因为它确实运行了整个元素列表。

同样,我在使用PeriodicTable将getSymbol导入我的方法时遇到了问题。 有什么有用的建议吗?

对于此方法,用户将输入元素的符号。该方法将搜索元素并返回其索引(在数组中)。然后,它将使用索引来显示单个元素及其所有其他信息,使用Element类中的toString方法。

public int searchBySymbol(String sym)
    {       
        int index = 0;
        boolean found = false;

        for (int i = 0; i < objects.length; i++)
        {
            objects[i] = objects.getSymbol;
        }   
        while (index < objects.length && !found)
        {
            if (objects[index].equals(sym))
            {
                found = true;
            }
            else
            {
                index++;
            }
        }       
        if(found)
        {
            System.out.println("Found at position: " + index);
            System.out.println(objects[index].toString());
        }
        else
        {
            System.out.println("Not found");
        }       
    }

1 个答案:

答案 0 :(得分:-1)

首先你绝对不需要两个循环,有两个解决方案:

  1. (推荐)如果按符号搜索元素将是查找元素的主要方式,请考虑使用HashMap来包含数据而不是元素数组,因为HashMaps允许查找对象一个key例如HashMap<String, Element>。查看HashMap API或查看此示例:http://beginnersbook.com/2013/12/hashmap-in-java-with-example/

  2. (快速修复)在Java中,最好定义访问器方法(如getSymbol()并返回字段而不是直接访问它),而不是使用两个循环来获取字段并进行比较。使用此方法,您可以将代码简化为...

    for (Element e : objects) {
        if (e.getSymbol().equals(sym) {
        return true; 
        }
    }
    //return false after the loop omits the need for an explicit boolean variable`
    
  3. 编辑:常用于索引访问的循环结构。索引号基本上由迭代器变量int i跟踪,因此您不需要单独的变量来跟踪它。

    for (int i = 0; i < objects.length; i++) {
        if (objects[i].getSymbol().equals(sym)) {
            //print i to show index number
            //print objects[i].toString();
            return true;
        }
    }
    //print not found...
    return false;