上一篇中有一个顺序表的根据位置来查找元素,这一篇用来优化这一段代码
优化的地方:
- 代码中该方法的名字:因为我想要写的这个函数是用来获得指定位置的元素是什么,所以该方法命名为elementAt更好。
- INVALID_INT_VALUE用了static final修饰,用作全局变量且不可改变,而上一篇中用的是flag,且flag是一个局部变量,我觉得这里应该是因为不利于后面的返回值。
- 这一点跟着老师学的。对于不符合输出要求的情况,直接返回其非法值。而循环外面的return直接返回正常情况的值。
package DataStructures;
import java.util.Scanner;
/*
* 这一个代码补充Sequential_List中的elementAt
*/
class Sequentiallist {
public static final int MAX_LENGTH = 10;
int length;
int[] data;
/*
* Construct an empty sequential list.
*/
Sequentiallist() {
this.length = 0;
data = new int[MAX_LENGTH];
}
/*
* Construct a sequential list using an array.
*/
Sequentiallist(int[] array) {
data = new int[MAX_LENGTH];
length = array.length;
for (int i = 0; i < array.length; i++) {
data[i] = array[i];
}
}
/*
* printList
*/
public void printList() {
for (int i = 0; i < length; i++) {
if (length == 0) {
System.out.println("Empty!");
} else {
System.out.print(data[i]);
if (i != length - 1) {
System.out.print(" , ");
} // Of if
} // Of else
} // Of for
}// Of printList
/*
* elementAt:By inputting a location,get an element.
*/
public static final int INVALID_INT_VALUE = -1;// 区别:这里的INVALID_INT_VALUE用static final修饰了,作为了全局变量
public int elementAt(int paraLocation) {
if ((paraLocation < 0) || (paraLocation >= length)) {
return INVALID_INT_VALUE;
} // Of if
return data[paraLocation];
}// Of elementAt
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int a[] = { 1, 2, 3, 4, 5 };
Sequentiallist list = new Sequentiallist(a);
System.out.println("Sequentiallist:");
list.printList();
System.out.println("\n" + "Sequentiallist's length is " + list.length + ".");
System.out.println("Please input a number representing the location : ");
int location = in.nextInt();
System.out.println("The element of " + location + " is " + list.elementAt(location));
}
}