java的一道题目 帮我看看为什么程序总是崩溃

这是题目
使用Scanner类实现从键盘输入多位同学的数学、物理、英语三门
课的成绩,要求计算并输出每位同学的总分,各门课的平均成绩及平
均总分。(参看例子14)
要求如下:
1)一次输入一行(格式为姓名 数学成绩 物理成绩 英语成绩)
2)分数之间用空格或逗号隔开
3)用end结束结束输入
4)用nextLine()一次读入一行,用trim()去掉行首和行尾的空行,
然后用split()方法分解字符串,用Double.parseDouble()解析获得
成绩值)
这是我写出来的程序:
package sy_9;

import java.util.Scanner;

public class Average {

public static void main(String[] args) {
// TODO Auto-generated method stub
int i=0;
String linText;
double mathSum=0,physicsSum=0,englishSum=0;
System.out.println("格式为姓名 数学成绩 物理成绩 英语成绩,以end结束");
Scanner sc=new Scanner(System.in);
linText=String.valueOf(sc.nextLine());

while(linText!="end"){ //我试了一下输入end停不了啊,为什么?
i=i+1;
String reg="^[1234567890.]+";
linText=linText.trim();
System.out.println(linText);
String temp[]=linText.split(reg);

mathSum +=Double.parseDouble(temp[1]); //一到这里就运行不下去了,,为什么,语法也没有错误啊
physicsSum +=Double.parseDouble(temp[2]);
englishSum +=Double.parseDouble(temp[3]);
linText=sc.nextLine();
}
System.out.println("数学的平均成绩为:"+mathSum/i+
",物理的平均成绩为:"+physicsSum/i+",英语的平均成绩为"+englishSum/i);
}
}

public class Average {
    public static void main(String[] args) {
        int i=0;
        String linText;
        double mathSum=0,physicsSum=0,englishSum=0;
        System.out.println("格式为姓名 数学成绩 物理成绩 英语成绩,以end结束");
        Scanner sc=new Scanner(System.in);
        linText=String.valueOf(sc.nextLine());
        
        while (!linText.endsWith("end")) {
            //我试了一下输入end停不了啊,为什么?
            i=i+1;
            linText=linText.trim();
            String temp[]=linText.split("\\s{1,}");
            mathSum +=Double.parseDouble(temp[1]);      //一到这里就运行不下去了,,为什么,语法也没有错误啊
            physicsSum +=Double.parseDouble(temp[2]);
            englishSum +=Double.parseDouble(temp[3]);
            linText=sc.nextLine();            
        }
        System.out.println("数学的平均成绩为:"+mathSum/i+
                ",物理的平均成绩为:"+physicsSum/i+",英语的平均成绩为"+englishSum/i);
    }
}

追问

为什么用我定义的那个正则表达式,就分割不出来我想要的结果呢

追答

我还想问你为什么你认为那个正则能分解出你要的结果?要返回匹配结果只能用group了

追问

我用你的也分不出来想要的结果啊、那个正则除了0123456789. 其他都作为分割的符号、、、不对吗?

追答

怎么可能分不出,我没测试过我会贴上来?

追问

那样输入是对, 换个方式它就分不出来了

追答import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Average {
//用group给你分一下吧
    public static void main(String[] args) {
       Matcher matcher=Pattern.compile("[0-9][0-9\\.]*").matcher("姓名 数学 34.43 物理 32.23 英语  49");
       String[] temp=new String[3];
       int i=0;
       while (matcher.find()) {
        temp[i]=matcher.group();
        i+=1;
       }
       for(String grade:temp){
        System.out.print(grade+"\t");
       }
    }
}

你那样输入取temp[2] temp[4] temp[6]啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-22
字符串比较用equals方法,至于运行不下去,我的看看是什么错误啊,要不然就是你的split解析有问题,解析出来的不是数字追问

解析出来的怎么就不是数字了

追答

你打印出来看看啊,不然怎么知道啊

追问

我打印了,但是一运行到打印的语句程序就崩溃了

追答

你可以先打印数组的长度,再打印字符串啊,不要打印Double.parseDouble(temp[1])
这个

第2个回答  2014-11-22
首先end你没有定义,所以不可以停止,死循环。追问

End定义怎么定义呢

相似回答