这是我的代码
public class NEW {
String Firstname;
String Lastname;
String Position;
int Jnum;
String Team;
public static void main(String[] args) throws Exception {
String a = JOptionPane.showInputDialog("Enter in 0 to sort by First Name\nEnter in 1 to sort by Last Name\n" +
"Enter in 2 to sort by position\nEnter in 4 to sort by Team names");
int q = Integer.parseInt(a);
File input = new File("Roster.txt");
Scanner players = new Scanner(input);
NEW [] array = new NEW [435];
int x=0;
while (players.hasNext()){
array[x] = new NEW();
array[x].Firstname = players.next();
array[x].Lastname = players.next();
array[x].Position = players.next();
array[x].Jnum = players.nextInt();
array[x].Team = players.next();
}
JOptionPane.showMessageDialog(null, array.toString()," ", JOptionPane.INFORMATION_MESSAGE);
players.close();
}
public static NEW[] BubbleSort(int num, NEW []array){
int p=0;
if (num==0){
String temp = null;
for(int k =1;k<435;k++){
for(int i=0;i<435-k;i++){
if(array[i].Firstname.compareTo(array[i+1].Firstname)>0){
temp = array[i].Firstname;
array[i].Firstname=array[i+1].Firstname;
array[i+1].Firstname= temp;
}
p++;
}
}
return array;
}
if (num==1){
String temp = null;
for(int k =1;k<435;k++){
for(int i=0;i<435-k;i++){
if(array[i].Lastname.compareTo(array[i+1].Lastname)>0){
temp = array[i].Lastname;
array[i].Lastname=array[i+1].Lastname;
array[i+1].Lastname= temp;
}
p++;
}
}
return array;
}
if (num ==2){
String temp = null;
for(int k =1;k<435;k++){
for(int i=0;i<435-k;i++){
if(array[i].Position.compareTo(array[i+1].Position)>0){
temp = array[i].Position;
array[i].Position=array[i+1].Position;
array[i+1].Position= temp;
}
p++;
}
}
return array;
}
if (num ==3){
int temp = 0;
for(int k =1;k<435;k++){
for(int i=0;i<435-k;i++){
if(array[i].Jnum>(array[i+1].Jnum))
temp = array[i].Jnum;
array[i].Jnum=array[i+1].Jnum;
array[i+1].Jnum= temp;
p++;
}
}
return array;
}
if (num ==4){
String temp = null;
for(int k =1;k<435;k++){
for(int i=0;i<435-k;i++){
if(array[i].Team.compareTo(array[i+1].Team)>0){
temp = array[i].Team;
array[i].Team=array[i+1].Team;
array[i+1].Team= temp;
}
p++;
}
}
return array;
}
else return array;
}
}
答案 0 :(得分:2)
在堆栈跟踪中,将有源文件的名称和行号。这些将告诉您确切的问题源代码行,这最终是您尝试访问没有的集合元素。例如:
List<String> l = Collections.emptyList();
String s = l.get(0); //will throw NoSuchElementException
或者它也可能表示您正在迭代Iterator
的结束(请注意Scanner
implements Iterator<String>
):
Iterator<String> itr = Collections.singleton("Hey").iterator();
itr.next(); // ok!
itr.next(); //will throw NoSuchElementException
每次在next()
上拨打Iterator
时,“指针”都会向前移动。如果您需要多次访问下一个元素,则需要将其保存在局部变量中,并且总是使用hasNext()
来检查元素是否可用:
while (itr.hasNext()) {
String s = itr.next();
System.out.println("Length of \"" + s + "\" is: " + s.length()); //access twice
}
除非您使用的是itr.remove()
,否则您可以利用 java foreach 循环,这样就无需编写大量的样板文件上面,虽然这不适用于Scanner
(Iterator
的情况 - foreach仅适用于Iterable
的实例:
for (String s : someIterable) {
//can use s as many times as you want
}
答案 1 :(得分:0)
正如oxbow_lakes所提到的,关于异常的更多信息会很好。
但是这段代码很可疑:
while (players.hasNext()){
array[x] = new NEW();
array[x].Firstname = players.next();
array[x].Lastname = players.next();
array[x].Position = players.next();
array[x].Jnum = players.nextInt();
array[x].Team = players.next();
}
如果players
在循环顶部可用的令牌少于五个,则其中一个next
将失败。 hasNext
告诉您的是,至少有一个令牌可用。你在这里假设至少有一个意味着你拥有全部五个,这显然不是一个有效的假设,因为当你没有可用的令牌时,你会得到next
被记录为抛出的确切异常。
答案 2 :(得分:0)
你已经使用了hasNext()方法,它实际上是一个枚举器()将你的数组更改为一个列表......它会更容易..你也用过next()
将其更改为List newelement = new LinkedList();
然后其他代码..
答案 3 :(得分:0)
先生,并不是说他在文件中的数量超过435 ..它的价格低于435 ..
这就是为什么它返回null ...
他使用了next()
将其列入清单......
至少它会等于你输入的内容..它不会是435但它等于文件的长度......
如此链接所述
http://download.oracle.com/javase/1.4.2/docs/api/java/util/NoSuchElementException.html