2011-09-27 110 views
0

我試圖用幾種不同的方法打印我的數組,並且似乎已經把它搞砸了。我曾經從中得到一些東西,現在我只能得到零。如果有人知道打印陣列的方法,很容易,那會很棒。使用Array.toString似乎沒有工作出於某種原因。在java中使用long []打印數組

public class Array { 
private long[] InitialArray; 
private int size = 0; 

/** 
* the default constructor 
*/ 
public Array(int size){ 
    InitialArray = new long[size]; 
} 

/** 
* this will scan in integers from a file 
* @param scans 
*/ 
public Array(Scanner scans){ 
    this(1); 
    int j = 0; //just used as a counter basically 
    while(scans.hasNext()){ //grabs each element 
     this.insert(Integer.parseInt(scans.nextLine())); //inserts it 
     j++; //steps through using the counter 
    } 
} 

/** 
* this will make the array longer if more space is needed so you don't 
* crash if you have a very large set of numbers 
*/ 
public void stretch(){ 
    long[] temp = new long[InitialArray.length *2]; //makes a temp array double the normal size 
    for(int i=0; i < InitialArray.length; i++) 
     temp [i] = InitialArray[i]; //steps through the old array to keep the data 
    InitialArray = temp; //assigns the temp array to the new array 
} 

/** 
* this will insert each element read, from a file, into the array 
* @param x 
*/ 
public void insert(int x){ 
    if (this.size+1 == InitialArray.length){ //trying not to crash 
     stretch(); //making sure I don't crash 
    } 
    InitialArray[size++] = x; //stepping through the numbers and inserting 
    sorter(); 
} 

/** 
* this is a selection sort on the array 
* It's not the quickest, but it's fairly easy to build and understand 
* Just finds the minimum element and swaps it to it's proper place 
* @return 
*/ 
public long[] sorter(){ 
    for (int i=0; i<InitialArray.length-1; i++){ 
     int minimum = i; //assigning a minimum 
     for (int j=i+1; j<InitialArray.length; j++){ 
      if (InitialArray[minimum] > InitialArray[j]) { //checking to make sure it is the smallest 
       minimum = j; //if it isn't then do this 
      } 
     } 
     if (minimum != i){ //all the swapping stuff, which I never really understand but it works 
      long temp = InitialArray[i]; 
      InitialArray[i] = InitialArray[minimum]; 
      InitialArray[minimum]= temp; 
     } 
    } 
    return InitialArray; 
} 
/** 
* @param args 
    */ 
public static void main(String[] args) { 
Scanner scans; 
try { 
    scans = new Scanner(new FileInputStream("src/some numbers.txt")); 
    Array InitialArray = new Array(scans); 
    System.out.println(InitialArray); 
} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 
} 

我不斷收到一個錯誤,說它必須是數組類型,但解析爲數組。我只是需要它來查看是否還有其他工作。

回答

3

對實際情況的回答是低於規則。大概這只是學習Java的代碼 - 否則ArrayList類會更合適。你應該嘗試將它用作調試練習......什麼可以幫助你找出問題所在(例如,記錄,通過調試器進行)?你怎麼一次解決一個問題?你怎麼能單元測試代碼?這樣,您將學到的不僅僅是特定代碼的錯誤。


您沒有在Array類中重寫toString。如果您添加此方法:

@Override public String toString() { 
    StringBuilder builder = new StringBuilder(); 
    for (int i = 0; i < size; i++) { 
     if (i > 0) { 
      builder.append(" "); 
     } 
     builder.append(InitialArray[i]); 
    } 
    return builder.toString(); 
} 

然後它會打印值。由於sorter方法的原因,它沒有打印出您期望的值,但這是一個單獨的問題。

目前您sorter()方法 - 這可能會或可能不會真的被排序正確,我沒有檢查 - 排序數組的整個,不僅達size。這意味着你最終將你的「有效」值排序到數組中的「無效」部分,然後你會覆蓋它。

如果你只是改變你的限制使用size而不是InitialArray.length它似乎工作 - 但正如我所說,我沒有檢查排序本身。

+0

謝謝,你是對的我的排序不正確。這僅僅是爲了學習一些東西。我可以嘗試將其更改爲一個ArrayList,然後我不必擔心它的大小,並可以擺脫我的整個拉伸和一切。我會盡力做到這一點。 – Defc0n

1

我沒有看到你的Arrays類實現了一個toString()方法。您應該重寫類中的toString()方法,並在實現中打印您希望看到的狀態。

在這個特殊的例子中,我假設它將打印長數組的數組。 Arrays.toString(long []數組)應該可以幫助你。

2

在您的Array類中使用java.util.Arrays.toString(long[])方法並覆蓋toString()方法。

我已在sorter()方法中進行了更正,以確保只應安排「有效」元素。

public class Array 
{ 
public long[] sorter() 
{ 
    for (int i=0; i<size; i++) 
    { 
    int minimum = i; 
    for (int j=i+1; j<size; j++) 
    { 
     if (InitialArray[minimum] > InitialArray[j]) 
     { 
      minimum = j; //if it isn't then do this 
     } 
     } 
    if (minimum != i) 
    { 
     long temp = InitialArray[i]; 
     InitialArray[i] = InitialArray[minimum]; 
     InitialArray[minimum]= temp; 
     } 
    } 
    return InitialArray; 
} 

@Override 
public String toString() 
    { 
    return java.util.Arrays 
     .toString(java.util.Arrays.copyOf(InitialArray,size)); 
    } 
} 
+0

這也是我的第一本能,但它忽略了確定有多少值「有效」的大小變量。 –

+0

的確如此。 sorter()混合了數組的有效和無效「部分」。 – adatapost

+0

但即使不是這樣,你最終會得到一堆0不是*邏輯*內容的一部分。 –