当前位置: 代码迷 >> Java相关 >> 各位看看有没有改进的可能
  详细解决方案

各位看看有没有改进的可能

热度:306   发布时间:2011-10-14 21:58:39.0
各位看看有没有改进的可能
程序代码:
package exception;
import javax.swing.JOptionPane;
public class Calc3 {
    public static void main(String[] args){
        double[] arr = new double[10];
        double temp = 0;
        double average = 0;
        double sum = 0;
        for (int i=0; i<arr.length; i++){
        try{
            String str = JOptionPane.showInputDialog(null, "请输入一个数");
            double j = Double.parseDouble(str);
            arr[i] = j;
        }
        catch (NumberFormatException ex){
            JOptionPane.showMessageDialog(null, "对不起,你输入的格式有误,请重新输入!!!");
            String str1 = JOptionPane.showInputDialog(null, "请再次输入一个数");
            double k = Double.parseDouble(str1);
            arr[i] = k;
        }
        }
        for (double e: arr){
            System.out.print(e +" ");
            sum = sum + e;
        }
        System.out.println();
        average = sum / 10;
        System.out.println("平均值 = " +average);
        for (int m=0; m<arr.length-1; m++){
            for (int n=0; n<arr.length-1-m; n++){
                if (arr[n] > arr[n+1]){
                    temp = arr[n];
                    arr[n] = arr[n+1];
                    arr[n+1] = temp;
                }
            }
        }
        System.out.println("最大值 = " +arr[arr.length-1]+ "最小值 = " +arr[0]);
    }
}
用JOptionPane输入10个double数值,分别是10个评委的亮分。如果输入的内容无法转换成为double,则重新出现输入框,并且输入框上面显示:对不起,您输入的格式有误,请您重新输入。最后显示最高分,最低分,平均分。
搜索更多相关的解决方案: average  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2011-10-14 14:21:27
yhlvht

等 级:版主
威 望:17
帖 子:544
专家分:3081
注 册:2011-9-30
  得分:3 
程序代码:
import java.util.ArrayList;
import java.util.Collections;

import javax.swing.JOptionPane;


public class Calc3 {

    public double parseDou(String str) {
        double j = 0;
        try {
            j = Double.parseDouble(str);
        }
        catch(NumberFormatException ex) {
            JOptionPane.showMessageDialog(null, "对不起,你输入的格式有误,请重新输入!!!");
            String str1 = JOptionPane.showInputDialog(null, "请再次输入一个数");
            j = parseDou(str1);
        }
        return j;
    }

    public static void main(String[] args) {
        double[] arr = new double[10];
        double temp = 0;
        double average = 0;
        double sum = 0;
        Calc3 Calc = new Calc3();
        ArrayList<Double> list = new ArrayList<Double>();
        for (int i=0; i<arr.length; i++){
            String str = JOptionPane.showInputDialog(null, "请输入一个数");
            temp = Calc.parseDou(str);
            list.add(temp);
            sum += temp;
            System.out.print(temp +" ");
        }
        System.out.println();
        average = sum / 10;
        System.out.println("平均值 = " +average);
        Collections.sort(list);
        System.out.println("最大值 = " +list.get(list.size() - 1)+ "最小值 = " +list.get(0));
    }
}

----------------解决方案--------------------------------------------------------
解释一下我上面的代码:
1、对于输入格式的判断,按楼主的写法,如果在catch中,仍然输入不合法的数字,那么程序就over了,因为输入错误的次数无法预估,所以仅仅catch一次是不够的,所以我将转换数字单独作为一个方法,使用了递归。楼主这个错误是致命的,是一定要修正的
2、楼主没有必要先把数存起来,等所的数都存好以后,再循环数组,相加求和,可以一边存,一边加,这样会少一个求和的循环,提高效率
3、我把数组换成了ArrayList,仅仅为了偷懒,想直接使用java提供的排序方法,不想自己写排序的方法而已

----------------解决方案--------------------------------------------------------
  相关解决方案