列出不同类型的数组值并添加它们

时间:2014-02-28 04:04:48

标签: java arrays parsing for-loop arraylist

我正在尝试编写一个程序,其中用户输入一系列数字作为字符串,然后程序将字符串拆分为单独的数字,按类型对它们进行分类,按组一起列出,然后将它们一起添加。例如,用户输入1,5,3L,284L,4.3和2.34。然后程序将1和5一起列出,3和284一起列出,4.3和2.34一起列出。然后,程序显示数字299.64。但是,我收到了一个错误。我会发布到目前为止的内容。我的问题可能来自哪些想法?谢谢。

这是我的错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1, 2L, 3.3"  
    at java.lang.NumberFormatException.forInputString(Unknown Source)   
    at java.lang.Long.parseLong(Unknown Source)     
    at java.lang.Long.parseLong(Unknown Source)     
    at change.NumberArray.Convert(NumberArray.java:21)  
    at change.TestNumberArray.main(TestNumberArray.java:9)

代码:

package change;

import java.util.ArrayList;
import java.util.Scanner;

public class NumberArray {

    static Scanner s = new Scanner(System.in);

    public static void Convert(){
        System.out.print("Enter numbers by: ");
        String input = s.nextLine();
        String[] inputString = input.trim().split(" , ");
        int i = 0;
        ArrayList<Long> listLong = new ArrayList<Long>();
        ArrayList<Double> listDouble = new ArrayList<Double>();
        ArrayList<Integer> listInt = new ArrayList<Integer>();

        while (i < inputString.length){
            if (inputString[i].contains("L")){
                long temp = Long.parseLong(inputString[i]);
                listLong.add(temp);
                i++;
            }
            else if (inputString[i].contains(".")){
                double temp = Double.parseDouble(inputString[i]);
                listDouble.add(temp);
                i++;
            }
            else{
                int temp = Integer.parseInt(inputString[i]);
                listInt.add(temp);
                i++;
            }
        }

        System.out.println("Here are the long numbers you entered:");
        for (int q = 0; q < listLong.size(); q++)
        {
            System.out.println(listLong.get(q));
        }

        System.out.println("Here are the double numbers you entered:");
        for (int q = 0; q < listDouble.size(); q++)
        {
            System.out.println(listDouble.get(q));
        }

        System.out.println("Here are the integer numbers you entered:");
        for (int q = 0; q < listInt.size(); q++)
        {
            System.out.println(listInt.get(q));
        }

        System.out.println("Here is the sum of the numbers you entered: ");
        double sum = 0;

        for (int z = 0; z < inputString.length; z++)
        {
            sum = sum + Double.parseDouble(inputString[z]);
        }

        System.out.print(sum);          
    }
}

1 个答案:

答案 0 :(得分:2)

你有:

String[] inputString = input.trim().split(" , ");

那将匹配空格 - &gt;逗号 - &gt;空间确切。 (这个拆分分隔符无法正常工作的一个很好的提示是整个未分割的输入字符串在错误消息中。)你可以使用这样的正则表达式来忽略空格:

String[] inputString = input.trim().split("\\s*,\\s*");

或者你可以用逗号分开......

String[] inputString = input.trim().split(",");

...然后稍后再使用inputString[i].trimmed()

顺便说一下;修复此问题后,您将遇到解析“L”字符串的问题,例如“3L”不是有效整数。你必须从字符串中取出“L”来解析它。