【问题标题】:Intro to Java - What's wrong?Java 简介 - 怎么了?
【发布时间】:2013-04-29 20:00:47
【问题描述】:

首先,我是新手。所以,当一切都是 int 时,我能够让它运行,但由于某种原因将它更改为 double,我只能输入第一个值并且它出错。我不明白为什么我不能这样做:

        int datVal = Integer.parseInt(inNum);

        double [] iOne;
        iOne = new double[datVal];

在我运行它或调试它之前没有错误。这是我得到的:

import java.util.Arrays;

import javax.swing.JOptionPane;

public class arStats2 {
    public static void main(String[] args) {
        double med, men, min, max;
        String inNum = JOptionPane.showInputDialog("Enter the number of data values:");

        int datVal = Integer.parseInt(inNum);

        double [] iOne;
        iOne = new double[datVal];

        double [] iTwo;
        iTwo = new double[datVal];

        int index=0;

        for (index=0; index < iOne.length; index++) {

            String value = JOptionPane.showInputDialog("Input a data value:");
            int valIn = Integer.parseInt(value);
            iOne[index] = valIn;
        }

        System.arraycopy(iOne, 0, iTwo, 0, iOne.length);
        Arrays.sort(iOne);

        String out1 = "Sorted data: ";
        for (int i=0; i<iOne.length; i++) {
            out1 = out1 +iOne[i]+"";
        }
        out1 = out1 +"\n";

        String out2 = "Original data: ";
        for (int i2=0; i2<iTwo.length; i2++) {
            out2 = out2 +iTwo[i2] + "";
        }
        out2 = out2 +"\n";

        med = median(iOne);
        men = mean(iTwo);
        max = computeMax(iOne);
        min = computeMin(iOne);

        JOptionPane.showMessageDialog(null, out2 +out1 +"Min Value: " +min +"\n"
                                        +"Max value: " +max +"\n"
                                        +"Median value: " +med +"\n"
                                        +"Mean value: " +men +"\n");
        }

    public static double median(double[] iOne) {

        double med;
        int index, indexHi, indexLo;
        if ((iOne.length %2) !=0) {
            index = iOne.length / 2;
            med = iOne[index];
        }
        else {
            indexHi = iOne.length / 2;
            indexLo = indexHi = 1;
            med = (iOne[indexLo] + iOne[indexHi])/2;
        }
        return med;
    }

    public static double mean(double[] iOne) {
        double sum = 0;
        for (int i = 0; i < iOne.length; i++) {
            sum += iOne[i];
        }
        return sum / iOne.length;
    }

    public static double computeMax(double[] iOne) {
        double max = (iOne.length - 1);
        return max;
    }

    public static double computeMin(double[] iOne) {
        double min;
        min = iOne[0];
        return min;
    }
    }

错误是:

Exception in thread "main" java.lang.NumberFormatException: For input string: "7.2"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:456)
    at java.lang.Integer.parseInt(Integer.java:497)
    at arStats2.main(arStats2.java:25)

【问题讨论】:

标签: java arrays int double


【解决方案1】:

您需要在此处将值解析为双精度:

 for (index=0; index < iOne.length; index++) {

        String value = JOptionPane.showInputDialog("Input a data value:");
        double valIn = Double.parseDouble(value); // this line is changed
        iOne[index] = valIn;
    }

这将使其适用于双精度值,但正如 ValarDohaeris 所指出的,您的代码中还存在其他问题。

【讨论】:

  • 我在发布之前尝试将其解析为 double。当我这样做时,它会提示我: iOne = new double[datVal];将 datVal 更改为 int。
  • 我复制粘贴了您的代码并添加了我的修改。输出似乎不正确,但我的代码中没有警告或错误。
  • 所以你所做的看起来像这样:double med, men, min, max; String inNum = JOptionPane.showInputDialog("Enter the number of data values:"); double datVal = Double.parseDouble(inNum); iOne[index] = datVal; double [] iOne; iOne = new double[datVal]; 抱歉。就像我说的,我是新手。我已经给我的教授发了 3 次电子邮件,但没有任何回应。
【解决方案2】:

如果您能更具体地了解该错误,将会很有帮助。 但是,我认为代码中有两部分是错误的:

indexLo = indexHi = 1;

应该是

indexLo = indexHi - 1;

在computeMax() 你应该有:

double max = iOne[iOne.length - 1];

【讨论】:

    【解决方案3】:

    但由于某种原因将其更改为双精度,我只能输入第一个 值和它的错误。

    嗯,原因是datVal = Integer.parseInt(inNum); 需要一个整数,而您传递给它的字符串包含双精度,这将导致 NumberFormatException 被抛出。

    你应该用 try{} catch {} 块包围它,然后做点什么。

    【讨论】:

    • 我没有投反对票!不知道是对是错!
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多