Java程序数组越界问题,请各路高手指点 15

packagemrh;importjava.io.File;importmrh.util.FileReaderUtil;importmrh.util.RandomUtil... package mrh;

import java.io.File;
import mrh.util.FileReaderUtil;
import mrh.util.RandomUtil;

public class Grouping {
public static void main(String[] args) {
Grouping h = new Grouping();
// 1. 从指定文件中读取包含学生姓名及学号的数组
String[] students = h.getStudents(new File("list.txt"));
// 2. 对学生数组students进行随机排序
students = h.group(students);
// 3. 打印出分组信息
h.printGroupingInfo(students, 3);
}

// 从指定文件中读取包含学生姓名及学号的数组
public String[] getStudents(File listFile) {
FileReaderUtil fru = new FileReaderUtil(listFile);
String[] students = fru.readLines();

return students;
}

// 对学生数组students进行排序, 随机数可以利用RandomUtil的generatInt(int max)产生
public String[] group(String[] students) {
int g = RandomUtil.generatInt(students.length - 1);
int m=0;
for (;m<=g;m++){
int i = 0;
int j = 0;

String[] stu1 = new String[students.length];
while (i<=28){
j = 2*i;
stu1[j] = students[i];
i++;
}
int k = (students.length-1)/2;
for (; i < students.length; i++) {
for (;k>=0;k++){
j=i-k;
stu1[j] = students[i];
}
}

while (j<=28){
i=2*j+1;
students[i]=stu1[j];
j++;
}

int n = (students.length+1)/2;
for (; j < stu1.length; j++) {
for (;n>=0;n--){
i=j-n;
students[i] = stu1[j];
}

}
}
return students;
}

// 打印出分组信息
public void printGroupingInfo(String[] students, int countMember) {
int u=1;
int i=0;
while ( u<=students.length/3){
System.out.println("第"+u+"组:");
for (; i < 3*u; i++) {
System.out.println(students[i]);
}
u++;
}

}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at mrh.Grouping.group(Grouping.java:45)
at mrh.Grouping.main(Grouping.java:13)
就是 students = h.group(students);
stu1[j] = students[i];
students = h.group(students);这三个地方显示有问题
展开
 我来答
a948614747
2011-05-05
知道答主
回答量:9
采纳率:0%
帮助的人:0
展开全部
这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
enterpgup
2011-05-02
知道答主
回答量:52
采纳率:0%
帮助的人:20万
展开全部
你先在
// 1. 从指定文件中读取包含学生姓名及学号的数组
String[] students = h.getStudents(new File("list.txt"));
把studens数组打印出来看看,是不是和你的list.txt文件的内容相同
在就是看看student.length是多少
追问
请问 // 2. 对学生数组students进行随机排序
students = h.group(students);
这一步对应的下面的分组方法对么?
还有这里 for (; i =0;k++){
j=i-k;
stu1[j] = students[i];
上一步While中将一个数组值赋给另个数组正确,但下一个就是这里Eclipse就显示错误了,这是什么原因啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
findinglfy
2011-05-02
知道答主
回答量:32
采纳率:0%
帮助的人:16.9万
展开全部
实际的文件中有没有读至少58个学生信息呢? 代码中的 j<=28 等28不知道是什么意思,最好定义一个有意义常量来表示。
追问
list文件中只有57个人,算法设计思路是跟洗牌一样,57个人,数组中间的那个数是28。0到28之间有28个空,刚好可以将后面的28个查到前面的28个空中,就跟将一副牌从中间对折,然后2部分互相插空一样
追答
while (j<=28){
i=2*j+1;
students[i]=stu1[j];
j++;
}
如果只有57人,那此处j=28时,students[57] 不就越界了吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天天U96v
2011-05-02 · TA获得超过304个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:158万
展开全部
应该是没有从文件中读到信息吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pengde_tao
2011-05-02 · 超过13用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:38.7万
展开全部
就是可能在stu1[j] = students[i]; 这里可能有问题
追问
将一个数组第i位赋值给另一个数组的第j位可以这样写吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式