簡體   English   中英

將數據插入未知長度數組java

[英]Inserting data into unknown length array java

我正在為收據制作者制作一個程序,由於多個項目,數組長度未知。 這是我的代碼:

public static void main (String str[]) throws IOException {
    Scanner scan = new Scanner (System.in);
    //Entering Input
    int mult = 1;
    double price = 0;
    double y = 0;
    int l = 1;
    double [] list = new double[l];
    while(mult != 0){
      if (mult != 0)
        System.out.println("Please Enter the Cost of the Item: ");
        y = scan.nextDouble();
        list[l]= y;
        l++;
      System.out.println("More than one item? (1 = yes 0 = no) ");
      mult = scan.nextInt();
      if (mult != 0)
        price += y;
    }

當我運行它時,我輸入了該項目的成本並出現錯誤。

如果我是你,我會使用數組列表。 它是您可以使用的動態數據結構,而不是您必須定義元素數量的典型數組。 您可以執行以下操作:

ArrayList<Double list = new ArrayList<Double>();
list.add(y); 

然后你通過執行list.get(1)或任何你想要的元素來獲取元素。

這樣做可以防止您在聲明數組時確切知道需要多少個元素。

沒有未知長度數組這樣的東西。 Java 中的任何數組(任何類型)都有一個字段length

但實際上這不是你的問題; 因為您根本沒有使用傳遞給您的方法的數組。 本質上,您是在詢問如何將數組用於未知大小的輸入。

有兩個答案:

  1. 正如 BlackHatSamurei 建議的那樣,您使用List<Double> numbers = new ArrayList<>() - 在添加其他元素時動態增長的現有類 [ 您一直使用List ,並且僅在實例化您使用特定 ArrayList 實現的具體對象時]
  2. 如果這是關於學習:您實現自己的 List 版本。 含義:您創建了一個使用數組存儲數據的類,並且每當您想添加數組可以容納的更多元素時; 您創建一個新的更大的數組並將所有數據復制到該數組中。

ArrayList

正如其他人所建議的,您應該使用Collection ,特別是List ,更具體地說是ArrayList

普通數組是固定長度的。 它不會增長或縮小。 要添加超出其容量的項目,您可以創建一個更大的數組並復制現有項目和新項目,最后刪除原始數組。 ArrayList由數組支持,但可以增長。 實際上,后備數組實際上並沒有增長,它處理我剛才代表您提到的細節:監視數組以檢測何時已滿,然后創建一個新數組,復制項目。

如果這是家庭作業,您的教師可能希望您了解這項雜務的詳細信息,在這種情況下,我給您的答案是:創建新數組、復制項目、添加新項目、替換原始數組。

要使用Collection (請參閱 教程),您需要超越僅使用基元並使用實際對象。 Java 具有幫助程序員從 C 編程過渡的原語,但類和對象才是 Java 真正的意義所在。 等效於double原語的類是Double

List<Double> costs = new ArrayList<>();
// … get your inputs from user and add each price-item to list …
costs.add ( y );

簡化你的邏輯

此外,您的邏輯很復雜,例如定義了l但從不使用它。 我嘗試重寫您的代碼但放棄了。 我建議你嘗試小一點,一次做一件事,構建你想要的應用程序。 獲取針對單個價格項目的數據輸入,然后在該工作之后嘗試支持多個價格項目。 真正的編程工作就是這樣完成的,一次一小塊。

提示:對變量使用描述性名稱。 這將有助於澄清你的想法。

BigDecimal

此外,在現實世界中,您永遠不會將doubleDouble用於價格或與金錢相關的任何事情。 這兩種數據類型都使用浮點技術,以犧牲准確性換取執行速度。 所以結果是近似的,而不是精確的,並且在小數部分的最右邊經常有多余的數字。

對於貨幣和其他精度很重要的領域,請使用BigDecimal對象。 BigDecimal一個字符串,而不是一個雙值,因為您可能已經引入了可怕的無關數字。 這個區域是學習使用對象而不是基元的另一個原因。

List<BigDecimal> costs = new ArrayList<>();
…
BigDecimal bd = new BigDecimal( userInputString ) ; // Input might be: 1.23
costs.add( bd );

暫無
暫無

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

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