我的问题是我需要从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");
}
}
答案 0 :(得分:-1)
首先你绝对不需要两个循环,有两个解决方案:
(推荐)如果按符号搜索元素将是查找元素的主要方式,请考虑使用HashMap
来包含数据而不是元素数组,因为HashMaps允许查找对象一个key
例如HashMap<String, Element>
。查看HashMap
API或查看此示例:http://beginnersbook.com/2013/12/hashmap-in-java-with-example/
(快速修复)在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`
编辑:常用于索引访问的循环结构。索引号基本上由迭代器变量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;