2014-08-30 58 views
0

我正在編寫一個程序,用於輸入多項式。需要爲每個多項式輸入創建一個新的ArrayList,我需要一種方法來命名每個列表,而不必事先知道多項式的數量。如果文件有2個多項式,我需要命名2個數組,但是如果有更多的多項式,我需要命名更多的數組。無論如何,用循環的迭代來自動命名數組或變量。我無法弄清楚如何。隨着多項式數目的增加,諸如P1,P2,P3等變量名稱就是我正在尋找的。每個多項式將逐行讀取。我附上我的代碼,儘管它遠沒有完成。我想我需要將PolyCalc創建移動到while循環中,併爲每一行輸入創建一個新的PolyCalc。我期待在main方法的while循環中添加此功能。自動創建按時間順序排列的變量名

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class PolyProcessor { 
    static int polyNum = 0; 
public static void main(String[] args) throws FileNotFoundException{ 


    File polyfile = new File("polyinput.txt"); 
    Scanner read = new Scanner(polyfile); 
    while (read.hasNextLine()){ 
     PolyCalc c = new PolyCalc(); 
     String j = read.nextLine(); 
     c.add(j.split(";")); 
     polyNum++;} 


    } 
    } 


class PolyCalc{ 
    static int polyCount = 0; 

    static ArrayList polynomials = new ArrayList(); 

    static void add(String[] strings){ 
     for(int i = 0; i<strings.length;i++){ 
      polynomials.add(strings[i]); 
      polyCount++;} 
    } 
    static Object get(int i){ 
     return polynomials.get(i); 

    } 
} 
+0

你爲什麼認爲這些多項式需要名稱? – user2357112 2014-08-30 06:23:59

+0

,因爲我需要添加或減去它們。用戶將被要求選擇他們想要添加的多項式。所以如果他們從文件中添加5個多項式,他們可以選擇將多邊形1和多邊形5,或多邊形4和多邊形3相加。 – Dave 2014-08-30 06:27:33

+1

這並不意味着您需要名稱。你有一個列表。這就是你需要的。 – user2357112 2014-08-30 06:36:14

回答

1

爲什麼不使用(哈希)映射關鍵字是變量名?

Map polys = new HashMap(); 

int count=0; 

For ... 
    string key = String.format("p%02d",count++); 
    polys.put(key, newPoly(...)); 

我不得不查找String.format,但類似的東西。

訂單需要保留,所以只需選擇足夠長的零填充密鑰,您可以排序。和/或使用保持插入順序的linkedHashMap。

+0

必須使用ArrayList類。所有的多項式必須存儲在ArrayList中。 – Dave 2014-08-30 06:32:03

+0

必須存儲在ArrayList中,或者ArrayList必須作爲API的一部分返回。如果後者那麼你可以簡單地: – HankCa 2014-08-30 07:26:19

+0

讓我再試一次(愚蠢的5分鐘超時!):當你說「它必須存儲在一個ArrayList」中,你的意思是它必須存儲在一個或ArrayList必須返回作爲API的一部分。如果後者則可以簡單地: public List getPolynomialArray(){ return new ArrayList (map.values()); } 如果前者和數組索引不足以及user2357112建議,那麼您需要使用反射來創建變量。 – HankCa 2014-08-30 07:33:10

0

首先,你不能使用變量來做到這一點。 Java不允許你動態地聲明變量。它不是那種編程語言...


如果它是強制性的多項式存儲在ArrayList然後:

  • 讓用戶通過號碼來指代多項式(即在列表中的位置),而不是按名稱,或

  • 創建從名稱映射到位置列表中的一個HashMap,或

  • 將多項式存儲在ArrayList<String>HashMap<String, String>中。

事實上,我認爲你可能誤解你的編程訓練的要求。我懷疑你被要求將每個單獨的多項式表示爲ArrayList(或者其中有一個ArrayList的自定義類)。將多項式表示爲String不允許您對其執行任何操作...而無需首先解析String並將其轉換爲另一種形式。

+0

我被要求創建一個用於處理表示爲ArrayLists的單變量多項式的程序。但顯然我不知道如何和困惑。 – Dave 2014-08-30 06:48:53

+0

您可能想要更改該評論。提示:「那」是什麼意思? – 2014-08-30 06:50:10

+0

也許現在更清楚了。 – Dave 2014-08-30 06:53:56

0

斯蒂芬的回答,你說的ArrayList是強制性的,你仍然可以使用ArrayList

ArrayList numbers = new ArrayList(); 


HashMap<String,ArrayList> myPolys = new HashMap<String,ArrayList>(); 

,並使用HashMap

myPolys.put(what do you want to call them or your so "called" variables , numbers); 
0

正如你絕對需要使用ArrayList類來存儲您的多項式你可以使用它的add(int index,E Element)method如下:

List polynomials= new ArrayList(); 
for(int k=0;k < counter;k++){ 
    polynomials.add(k, new Poly(...)); 
} 

你不會有P0P1,......但polynomials.get(0)polynomials.get(1),... 由於gmhkthis

+0

困惑我這是什麼? – Dave 2014-08-30 07:21:17

+0

這裏您可以根據需要在ArrayList中添加多項式。但是你將通過ArrayList中的索引訪問它們。這就是爲什麼你看到polynomials.get(1)訪問索引1(你的P1)的多項式。 根據我最好的方法是使用地圖。在那裏你可以使用他們的字符串鍵「P0」,「P1」,...存儲你的多項式,並用Map [獲取方法](http://docs.oracle.com/javase/8/docs/api/爪哇/ UTIL/HashMap.html#GET-java.lang.Object-)。但是你想要一個ArrayList。我給了我所擁有的。 – 2014-08-30 08:44:03