2015-06-19 73 views
0

我是新來的編程和Java,我試圖寫一個簡單的泡沫排序算法。我可能會在我的頭上,我在Oracle的Java教程中並沒有太多的東西。我現在遇到的麻煩不在於自動排序,而是在創建數組並在排序之前將其打印出來。我需要幫助傳遞一個數組,並調用它的基本方法

這是我到目前爲止有:

public class BubbleSort { 

    public BubbleSort(int size) { 

     // creates array 
     int[] items = new int[size]; 
    } 

    public void fillArray(int[] a) { 

     // fill array with random ints 
     for (int i=0; i<(a.length-1); i++) { 
      a[i] = java.util.Random.nextInt(50); 
     } 
    } 

    public void printArray(int[] a) { 

     for (int i=0; i<a.length; i++) { 
      System.out.print(a[i] + " "); 
     } 
    } 

    public void BubbleSortAlgorithm() { 

     // bubble sorting algorithm goes here 

    } 

    public static void main(String[] args) { 

     BubbleSort bubbleSort = new BubbleSort(20); 
     bubbleSort.fillArray(items); 
     bubbleSort.printArray(items); 
     // bubbleSort.BubbleSortAlgorithm(items); 
     // bubbleSort.printArray(items); 
    } 
} 

我得到3編譯器錯誤:

  1. 非靜態方法nextInt(INT)不能從靜態上下文中引用

這是因爲它在主要方法中調用?我該如何解決這個問題?第二,三,三,四,六,六,六編譯器找不到符號,項目。 Items是在類的構造函數中創建的整數的數組。我需要在主要方法中聲明它嗎?

我有一種感覺,我的班級結構完全關閉。再次,我很新。我也是新來的stackoverflow,所以我也很抱歉,如果這個問題不好。

+1

歡迎棧溢出。我們對提問有特別的規則和指導,[幫助/如何問]是一個很好的開始。我看到的一個問題是,你的問題似乎沒有顯示研究工作。它確實有相關的代碼(它已經讓你領先於一些新用戶),但是你還沒有說過你到目前爲止嘗試解決你的錯誤。另一個是大多數用戶認爲像「我是新手編程和Java」是噪聲;他們分心的問題。這可以通過[編輯]修復。 – BSMP

+0

是否可以粘貼具有3個錯誤詳細信息的實際堆棧跟蹤,以及它們發生的位置?沒有這一點,很難做到超出猜測。我可以告訴你,雖然它找不到符號項的原因是因爲你在你的一個方法中聲明瞭它,但是你試圖在你的主方法中使用它,你沒有聲明。你的程序中的一部分不知道什麼項目可以。如果你的每個方法都會接受一個數組作爲參數,那麼你應該在main方法中創建你的數組,而不是在你的類的構造函數中。 –

回答

3

您致電:

java.util.Random.nextInt(50); 

它的首選導入你要使用類。這將使該塊在文件的頂部:

import java.util.Random; 

並更改現有代碼:

Random.nextInt(50); 

修復該問題的風格,但你還是會得到相同的編譯器錯誤。

靜態方法是屬於某個類的東西;他們不需要你在使用它們之前創建(實例化)該類的一個對象。而不是每個具有該方法的類的實例化,該類的所有實例化實例共享相同的靜態方法和變量。

具體來說,Random類中的.nextInt()是而不是 a static;這是一種正常的方法。所以它需要一個實例化的隨機工作。這意味着你應該嘗試:

Random random = new Random(); 
random.nextInt(50); 

你實例化一個隨機之後,你就可以不斷的打電話就可以了nextInt(),多次,只要你願意。

通常使用的靜態方法的一個示例在Math類中。

Math.min(10, 5); 
Math.max(100, 100000); 

依此類推。

隨機需要實例化的原因是它有狀態。它不是完全隨機的,而是僞隨機的,因爲它需要一個數字來開始。如果你不給它一個數字,它需要當前時間。兩個Java隨機對象在同一時刻初始化......將產生相同系列的「隨機」數字。

這實際上是有用的;你可以給他們隨機對象的數字開始,你可以使用這種行爲進行測試。

Random random = new Random(1); 

這與(每次數1。這意味着它會產生相同隨機數爲nextInt)播種它,你運行你的代碼。如果你沒有給它任何數字作爲種子,它是這樣做的,而不是:

Random random = new Random(System.currentTimeMillis()); 

但是是的;問題是Random.nextInt不是一個靜態方法。

0

第一件事是 NextInt方法非靜態 所以,你必須使用隨機類的實例來使用它 第二個 項目是局部變量,所以你必須要聲明之前使用它