现在我碰到一个问题,已经搞了两天了! 下面就是我写的关于学生的统计成绩的代码!当我在做删除的时候,我也不知道是删除了没有,可是当我删除一次以后,如果做统计和修改的话,系统会报错。我都不知道怎么改了,在网上也查了好久。可是网上说的都是我没学的用法! 高手能告诉我该怎么写吗?谢谢!!!import java.util.*;
public class Main_2 {
static Scanner sc =new Scanner(System.in);

static int luru(Student[] s,int t)
{
for (;;)
{
s[t] =new Student();//数组初始化,也就是把main函数下面传递过来的t的值放在数组里,当前t的值是0。
System.out.println("请输入"+(t+1)+"学生的名字");
String str= sc.next();//先定义一个Sting str.

if (chaxun(s,t,str)==1)//括号中包含了一个调用模块,模块中在传递 最主要的就是看模块返回的值!
{
System.out.println("你输入的学生已存在");
}
else
{
s[t].sname =str;
System.out.println("请输入"+s[t].sname+"的语文成绩");
s[t].chinese =sc.nextInt();
System.out.println("请输入"+s[t].sname+"的数学成绩");
s[t].math =sc.nextInt();
System.out.println(s[t].sname+"总分是"+(s[t].chinese+s[t].math));
t++;
}

System.out.println("是否继续输入");
System.out.println("是请按1");
System.out.println("否请按出1以外的任何数字键");
int choise1=sc.nextInt();
if (choise1 != 1)
{
break;
}
}
return t;
}

static int chaxun(Student[] s,int t,String str)//接受上面传递过来的数组、值和输入的名字。
{
for (int i=0;i<=t-1;++i)
{
if (s[i].sname.equals(str))//对比输入的名字是否在数组中出现过。
{
return 1;//如果名字在数组中出现过则返回1。注:返回值可以随便是哪个,但是一旦更改的返回值后上面也要随之改变。
}
}
return 0;//如果没有出现则返回0。注:返回值可以随便是哪个,但是一旦更改的返回值后上面也要随之改变。
}

static void tongji(Student[] s,int t)
{
for (;;)
{
if (t == 0)//下面传递过来的t的值是0的话 就表示还没有录入过任何一个学生的资料。
{
System.out.println("你还没有录入任何学生的资料");
break;
}

System.out.println("请输入你要统计的种类");
System.out.println("1.得到语文最高分和最低分的学生名字和分数");
System.out.println("2.得到数学最高分和最低分的学生名字和分数");
System.out.println("3.得到总分最高和最低的学生名字和分数");
int choise =sc.nextInt();
switch (choise)
{
case 1:getC(s,t);break;
case 2:getM(s,t);break;
case 3:getZ(s,t);break;
default:System.out.println("您输入的有误");
}

System.out.println("是否继续统计");
System.out.println("是请按1");
System.out.println("否请按出1以外的任何数字键");
int choise1=sc.nextInt();
if (choise1 != 1)
{
break;
}
}
}

static void getC(Student[] s,int t)
{
int maxC=s[0].chinese;
int minC=s[0].chinese;
int max=0;
int min=0;
for(int i=1;i<=t-1;++i)
{
if (maxC<s[i].chinese)
{
maxC=s[i].chinese;
max=i;//知道分数最高的地址。地址中包含了学生的姓名和成绩。
}

if (minC>s[i].chinese)
{
minC=s[i].chinese;
min=i;//知道分数最低的地址。地址中包含了学生的姓名和成绩。
}
}

System.out.println("学生"+s[max].sname+"的语文成绩最高,分数是:"+maxC);
System.out.println("学生"+s[min].sname+"的语文成绩最低,分数是:"+minC);
}

static void getM(Student[] s,int t)
{
int maxM=s[0].math;
int minM=s[0].math;
int max =0;
int min =0;
for (int i=1;i<=t-1;++i)
{
if (maxM<s[i].math)
{
maxM=s[i].math;
max=i;//知道分数最高的地址。地址中包含了学生的姓名和成绩。
}

if (minM>s[i].math)
{
minM=s[i].math;
min=i;//知道分数最低的地址。地址中包含了学生的姓名和成绩。
}
}

System.out.println("学生"+s[max].sname+"的数学成绩最高,分数是:"+maxM);
System.out.println("学生"+s[min].sname+"的数学成绩最低,分数是:"+minM);
}

static void getZ(Student[] s,int t)
{
int[] z=new int[t];
for (int i=0;i<=t-1;++i)
{
z[i] =s[i].chinese+s[i].math;
}

int maxZ=z[0];
int minZ=z[0];
int max=0;
int min=0;
for (int j=1;j<=t-1;++j)
{
if (maxZ<z[j])
{
maxZ=z[j];
max=j;//知道总分最高的地址。地址中包含了学生的姓名和成绩。
}

if (minZ>z[j])
{
minZ=z[j];
min=j;//知道总分最低的地址。地址中包含了学生的姓名和成绩。
}
}

System.out.println("学生"+s[max].sname+"的总分最高,分数是:"+maxZ);
System.out.println("学生"+s[min].sname+"的总分最低,分数是:"+minZ);
} static void xiugai(Student[] s,int t)
{
for (;;)
{
if ( t == 0)
{
System.out.println("您还没有录入任何学生的资料");
break;
}
System.out.println("请选择你要修改的种类");
System.out.println("1.改名字");
System.out.println("2.改语文成绩");
System.out.println("3.改数学成绩");
int choise =sc.nextInt();

switch (choise)
{
case 1:gXM(s,t);break;
case 2:gC(s,t);break;
case 3:gM(s,t);break;
default:System.out.println("您的输入有误");
}

System.out.println("是否继续选择修改的种类");
System.out.println("是请按1");
System.out.println("否请按出1以外的任何数字键");
int choise1=sc.nextInt();
if (choise1 != 1)
{
break;
}
}
}

一次发不下,后面那段在下面!!!

解决方案 »

  1.   

    static int chazhao(Student[] s,int t,String str)
    {
    int p=-1;//如果定0的话 假如没有条件进入循环那返回的值就是0要做修改的话就和第一个修改。
    for (int i=0;i<=t-1;++i)
    {
    if (s[i].sname.equals(str))
    {
    p=i;
    }
    }
    return p;
    }

    static void gXM(Student[] s,int t)
    {
    for (int i=0;i<=t-1;++i)
    {
    System.out.println("请输入你要修改的名字");
    String str =sc.next();
    int p=chazhao(s,t,str);
    if (p<0)
    {
    System.out.println("没有此学生可供你修改");
    }
    else
    {
    System.out.println("该学生存在请修改");
    s[p].sname=sc.next();
    System.out.println(str+"的名字改为"+s[p].sname);
    System.out.println("修改完毕");
    break;
    }

    System.out.println("是否继续修改学生名字");
    System.out.println("是请按1");
    System.out.println("否请按出1以外的任何数字键");
    int choise1=sc.nextInt();
    if (choise1 != 1)
    {
    break;
    }
    }
    }

    static void gC(Student[] s,int t)
    {
    for (int i=0;i<=t-1;++i)
    {
    System.out.println("请输入你要修改的学生名字");
    String str =sc.next();
    int p=chazhao(s,t,str);
    if(p<0)
    {
    System.out.println("没有此学生可供你修改");
    }

    else
    {
    System.out.println("该学生存在请修改");
    s[p].chinese=sc.nextInt();
    System.out.println(str+"学生原本的语文成绩是"+s[i].chinese+"现改为"+s[p].chinese);
    System.out.println("修改完毕");
    break;
    }

    System.out.println("是否继续修改语文成绩");
    System.out.println("是请按1");
    System.out.println("否请按出1以外的任何数字键");
    int choise1=sc.nextInt();
    if (choise1 != 1)
    {
    break;
    }
    }
    }

    static void gM(Student[] s,int t)
    {
    for (int i=0;i<=t-1;++i)
    {
    System.out.println("请输入你要修改的学生名字");
    String str =sc.next();
    int p=chazhao(s,t,str);
    if(p<0)
    {
    System.out.println("没有此学生可供你修改");
    }

    else
    {
    System.out.println("该学生存在请修改");
    s[p].chinese=sc.nextInt();
    System.out.println(str+"学生原本的数学成绩是"+s[i].chinese+"现改为"+s[p].chinese);
    System.out.println("修改完毕");
    break;
    }

    System.out.println("是否继续修改数学成绩");
    System.out.println("是请按1");
    System.out.println("否请按出1以外的任何数字键");
    int choise1=sc.nextInt();
    if (choise1 != 1)
    {
    break;
    }
    }
    }

    static void shanchu(Student[] s,int t)
    {
    for(;;)
    {
    //System.out.println("请选择你要删除的种类");
    System.out.println("是否删除学生资料");
    System.out.println("是请按1");
    System.out.println("否请按除1以外的任何数字");
    int choise =sc.nextInt();
    switch (choise)
    {
    case 1:sXM(s,t);break;
    default:break;
    }

    System.out.println("是否继续删除");
    System.out.println("是请按1");
    System.out.println("否请按出1以外的任何数字键");
    int choise1=sc.nextInt();
    if (choise1 != 1)
    {
    break;
    }
    }
    }

    static void sXM(Student[] s,int t)
    {
    System.out.println("请输入你要删除的学生姓名");
    String str=sc.next();
    int p=chazhao(s,t,str);
    if (p<0)
    {
    System.out.println("没有此学生可供你删除");
    }

    else
    {
    if (p<=t-2)
    {
    for (int i=0;i<=t-2;++i)
    {
    s[i]=s[i+1];
    System.out.println("该学生的所有资料已删除");
    }
    }

    if (p == t-1)
    {
    s[p] =null;
    System.out.println("fjsdldsj");
    }

    if (p>t-1)
    {
    System.out.println("没有学生可供你删除");
    }
    }


    }
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Student[] s =new Student[100];//设定一个数组。
    int t=0;//定义人数
    for (;;)
    {
    System.out.println("欢迎您使用学生成绩录入系统");
    System.out.println("请选择你的操作");
    System.out.println("1.录入");
    System.out.println("2.统计");
    System.out.println("3.修改");
    System.out.println("4.删除");
    System.out.println("5.退出");
    int choise =sc.nextInt();
    switch (choise)
    {
    case 1:t=luru(s,t);break;//调用函数返回的是人数是几个也就是t。
    case 2:tongji(s,t);break;//现在括号中传递的t的值就变成了case 1中返回的t的值。
    case 3:xiugai(s,t);break;//现在括号中传递的t的值就变成了case 1中返回的t的值。
    case 4:shanchu(s,t);break;//现在括号中传递的t的值就变成了case 1中返回的t的值。
    //case 5:exit();break;
    default:System.out.println("您输入的有误");
    }

    System.out.println("是否继续");
    System.out.println("是请按1");
    System.out.println("否请按出1以外的任何数字键");
    int choise1=sc.nextInt();
    if (choise1 != 1)
    {
    break;
    }
    }
    }
    }
      

  2.   

    头一次见到用汉语拼音写方法和变量名的..最好不要这么写..
    LZ可以用List