2012-11-30 22 views
0

我想創建一個自定義包來放一些我的類,但是當我嘗試將它導入到我的程序之一時,它說它找不到。自定義Java包不工作

這是我想對文件進行編譯,但跟它的包無法找到

import project_euler.Fibonacci; 

public class test { 
    public static void main(String[] args) { 
     Fibonacci fib = new Fibonacci(); 
     System.out.println(fib.getTerm(10)); 
    } 
} 

這是斐波那契類

package project_euler; 
public class Fibonacci { 
    public int getTerm(int n) { 
     if (n < 0 || n > 46) { 
      throw new IllegalArgumentException(); 
     } else { 
      return (n > 1) ? getTerm(n-1) + getTerm(n-2) : n; 
     } 
    } 
} 

這是我收到的時候我嘗試錯誤編譯

test.java:1: error: package project_euler does not exist 
import project_euler.Fibonacci; 
       ^
test.java:6: error: cannot access Fibonacci 
      Fibonacci fib = new Fibonacci(); 
      ^
bad source file: C:\Users\dhout_000\Documents\Project Euler\project_euler\Fibonacci.java 
file does not contain class Fibonacci 
Please remove or make sure it appears in the correct subdirectory of the sourcepath. 
2 errors 

而我的目錄設置爲

> My Documents 
    > Project Euler 
     - test.java 
     > project_euler 
      - Fibonacci.class 
      - Fibonacci.java 

我只是不能似乎找出問題是

+3

你爲什麼要在包文件夾中放入'.java'文件?把它移到外面。並重新編譯它。 –

+0

從哪個目錄運行編譯器?您應該從'C:\ Users \ dhout_000 \ Documents \ Project Euler'運行它或相應地設置類路徑。在我看來,你是從其他地方運行它的,所以編譯器誤解你的包結構(開始時並不是那麼好,但那是另一個問題)。 – ivantod

回答

1

確保你沒有CLASSPATH環境變量設置什麼。

編譯並運行程序包層次結構的基本目錄中的代碼。

C:\My Documents\Project Euler> javac project_euler\Fibonacci\*.java 

C:\My Documents\Project Euler> java project_euler.Fibonacci.test 

您也可以使用該javacjava命令-cp選項明確指定的類路徑。確保包括層次結構的基礎目錄(C:\My Documents\Project Euler)。當你在C:\My Documents\Project Euler你可以通過指定.(當前目錄)做到這一點:

C:\My Documents\Project Euler> javac -cp . project_euler\Fibonacci\*.java 

C:\My Documents\Project Euler> java -cp . project_euler.Fibonacci.test 

注:根據常見的Java命名約定,你不應該使用在名稱中使用下劃線(包,類,方法名稱),軟件包名稱應該是小寫,類名應該以大寫字母開頭。將程序包重命名爲projecteuler.fibonacci(您還需要重命名文件夾),並將類test重命名爲Test

+0

如果您查看相關源代碼,您會看到「test」類是默認包,而「Fibonacci」類是在'project_euler'包中。因此,他的目錄結構**如問題**中所示是正確的,並且與他的源代碼一致(實際上,我剛剛嘗試過並且工作正常)。問題在別的地方(或者問題中發佈的內容並不能完全反映他機器上的真實內容)。 – ivantod

+0

沒有'Fibonacci'包,這是類的名稱,所以不需要該文件夾存在。 – ivantod

+0

@ivantod你說得對,我沒有仔細看。編輯我的答案。 – Jesper