簡體   English   中英

列出不同類型的數組值並添加它們

[英]Listing Array values of different types and adding them

我正在嘗試編寫一個程序,其中用戶輸入一系列數字作為字符串,然后該程序將字符串拆分為單獨的數字,按類型對它們進行分類,按組將它們列出在一起,然后將它們加在一起。 例如,用戶輸入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);          
    }
}

你有:

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

它將完全匹配空格->逗號->空格。 (此拆分定界符不能正常工作的一個很好的提示是,整個未拆分的輸入字符串都在錯誤消息中。)您可以使用這樣的正則表達式來忽略空白:

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

或者您也可以以逗號分隔...

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

...然后在以后使用inputString[i].trimmed()

順便說說; 解決此問題后,解析“ L”字符串時會遇到問題,例如“ 3L”不是有效的整數。 您將必須從字符串中獲取“ L”來進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM