0

NetBeans 7.2.1 IDE で作成したプログラムがコンパイルされず、Notepad++ で実行されない理由を調べています。それは私にとって魅力的なことであり、なぜこれが起こっているのか知りたい.

このプログラムには、メイン クラス SalaryDemo と、プログラムのセッターとゲッターを含む別のクラス Salary があります。計算ミス以外は問題なく動きます。これが Notepad++ でどのように動作するのか興味があり、Notepad++ をセットアップした後、これが動作しないことがわかりました。私はdosにシェルアウトしようとしましたが、同じことをしたので、Notepad ++ではないと思います。

このプログラムは、営業担当者と営業担当者の年間総売上高に ArrayList を使用します。何らかの理由で、VM は ArrayList または Salary 変数のシンボルを見つけることができません。これは私の理解です。これについての助けを本当に感謝します。初めてなのでお手柔らかに。

エラー メッセージは次のとおりです。その他のサポート ドキュメントまたはコードが必要な場合は、すぐに投稿します。

    NPP_EXEC: "Compile and Run"
CD: Matches Current Directory
Current directory: Matches CD: 
javac SalaryDemo.java
Process started >>>
SalaryDemo.java:37: error: cannot find symbol
        ArrayList<Salary> salaryArray = new ArrayList<>(); 
                  ^
  symbol:   class Salary
  location: class SalaryDemo
SalaryDemo.java:37: error: unexpected type
     ArrayList<Salary> salaryArray = new ArrayList<>()
                                                ^
required: class
  found:    <E>ArrayList<E>
  where E is a type-variable:
    E extends Object declared in class ArrayList
SalaryDemo.java:52: error: cannot find symbol
            Salary employee = new Salary(); 
            ^
  symbol:   class Salary
  location: class SalaryDemo
SalaryDemo.java:52: error: cannot find symbol
            Salary employee = new Salary(); 
                                  ^
  symbol:   class Salary
  location: class SalaryDemo
SalaryDemo.java:103: error: cannot find symbol
       Salary calcSalary = new Salary();
       ^
  symbol:   class Salary
  location: class SalaryDemo
SalaryDemo.java:103: error: cannot find symbol
       Salary calcSalary = new Salary();
                               ^
  symbol:   class Salary
  location: class SalaryDemo
6 errors

ここに関連するコードがあります

SalaryDemo (main class)

package salarydemofinal;

// Imports the DecimalFormat class and all java.util classes 
import java.text.DecimalFormat;

SalaryDemo (main class)

// Public class SalaryDemo matches the filename and is accessable 
// by methods outside the SalaryDemo class.
public class SalaryDemo 
{
    public static void main(String[] args)
    {
        // Initialize Scanner.     
        Scanner input = new Scanner(System.in);

        // Initialize DecimalFormat to format percentages. 
        DecimalFormat df = new DecimalFormat("####%"); // Initialize

        // Initialize the Array list and use the Salary class to store and 
        // manipulate elements of the array. 
        ArrayList<Salary> salaryArray = new ArrayList<Salary>(); 
        String newEmployee = "";
        double newSales = 0; 
        double counter; 
        double setSalesDifference; 
        double setTCompDifference;
        double nqDifference;

Salary class

package salarydemofinal;



public class Salary  {

    // Initialize local Salary class variables
    private String name; // Holds employee name
    private double base = 4000; // Holds fixed monthly salary
    private double sales; // Holds annual sales figure data-
    private double calc; // Holds data calculate commission
    private double com = .25;       //Holds commission percentage multiplier
    private double totalComp;   // Holds sum of commission and annual salary data
    private double annualSalary; // Holds data derived from 12 months of base rate
    private double salesTarget = 120000; 
    private double threshold = salesTarget * .80; 
    private double commission; // sets the commission. 
    private double annualCompensation;
    private double acceleratedSales;
    private double notQualified;

これは、Notepad ++でコンパイラを実行する方法です...これは標準外であることは認識していますが、これは機能するはずだと感じています。プログラムはそれほど複雑ではありません。

cd "$(CURRENT_DIRECTORY)" javac $(FILE_NAME) java $(NAME_PART)

私の意見では、これは DOS にシェルアウトしてプログラムをコンパイルして実行しようとするときに使用する方法と同じです。現時点でわかっていることは、1 つのプログラム (プロジェクト) に必要なすべてのクラスがパッケージに含まれているということだけです。package ステートメントは、メイン クラス (SalaryDemo) とサブクラス Salary の両方で一致する必要があります。

これを NetBeans IDE と同じように C:\\salarydemofinal ディレクトリに配置しようとしましたが、うまくいきませんでした。私はおそらく何か基本的なことが欠けていることを知っています。私が述べたように、これは私の意見ではうまくいくはずです。

私はそれについて考え、Notepad ++を式から外し、DOSにシェルアウトしてこれをコンパイルしようとしました.javac * .javaなどのすべてのJavaファイルを一度にコンパイルする必要があることを示唆する別のstackoverflow記事を見つけたからです。それが前向きな一歩かどうかはわかりません。エラー数は 4 に減少しましたが、今回はスキャナーが見つかりませんでした。これは出力でした:

SalaryDemo.java:31: エラー: シンボルが見つかりません Scanner input = new Scanner(System.in); ^ シンボル: クラス スキャナーの場所: クラス SalaryDemo SalaryDemo.java:31: エラー: シンボルが見つかりません スキャナー入力 = new Scanner(System.in); ^ シンボル: クラス スキャナの場所: クラス SalaryDemo SalaryDemo.java:38: エラー: シンボル ArrayList が見つかりません。^ シンボル: クラス ArrayList 場所: クラス SalaryDemo SalaryDemo.java:38: エラー: シンボル ArrayList が見つかりませんsalaryArray = new ArrayList(); ^ 記号: クラス ArrayList 場所: クラス SalaryDemo 4 エラー

4

1 に答える 1

0

Salaryクラスを同じパッケージに入れるか、SalaryDemoそれが必要SalaryDemoですimport。それらが既に同じパッケージに含まれている場合は、コンパイルしていないことを意味Salaryし、コンパイラの実行方法を投稿する必要があります。

問題の発見を実際に報告しているわけではありませArrayListSalary。このエラーが発生した場合:

SalaryDemo.java:37: error: unexpected type
     ArrayList<Salary> salaryArray = new ArrayList<>()
                                                ^
required: class
  found:    <E>ArrayList<E>
  where E is a type-variable:
    E extends Object declared in class ArrayList

つまり、パラメータ化された型ArrayList<Salary>が存在しないということです。でも存在しないから存在Salaryしない。先ほどのエラーの結果です。

于 2013-03-19T13:49:16.623 に答える