簡體   English   中英

為什么命令提示符在編譯時給我一個錯誤代碼,而我的 IDE 卻沒有?

[英]Why does command prompt give me an error code in compilation when my IDE doesn't?

對不起,如果這是一個愚蠢的問題,但我對一般的編程不熟悉。 最近,我決定嘗試通過Java制作某種CYOA游戲作為對自己的挑戰。 它在 IDE (Eclipse) 上運行得很好,但是當我嘗試在命令提示符下為我的 Main.java 文件使用 java 和 javac 命令時,它不起作用。

Main.java:12: error: cannot find symbol
                game.MainCharacter mc = new game.MainCharacter();
                    ^
  symbol:   class MainCharacter
  location: package game
Main.java:12: error: cannot find symbol
                game.MainCharacter mc = new game.MainCharacter();
                                                ^
  symbol:   class MainCharacter
  location: package game
2 errors

是彈出的錯誤。 然而,在我的 IDE 上,沒有任何東西彈出,讓我可以毫無問題地運行代碼。 它只是發生在命令行中。 我錯過了什么嗎?

package game;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int i = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("Choose your class:");
        System.out.println("Soldier\nMage\nTechnician");
        String choice = "null";
        game.MainCharacter mc = new game.MainCharacter();
        do {
            choice = input.nextLine();
            try {
                mc.changeClass(choice);
            } catch (Exception e) {
                input.next();
            }
            if (mc.job != null) {
                i++;
            }
        } while (i < 1); i--;
        System.out.format("You've picked %s. Now please, tell me what I should call you.%n",mc.job);
        String name = input.next();
        mc.setName(name);
        mc.showStats();
        input.close();
    }
}

package game;

public class MainCharacter {
    protected int physical;
    protected int magical;
    protected int technical;
    protected String name;
    protected String job;
    
    public void changeClass(String kw) {
        switch (kw.toLowerCase()) {
        case "soldier":
            this.Soldier();
            break;
        case "mage":
            this.Mage();
            break;
        case "technician":
            this.Technician();
            break;
        default:
            System.out.println("Invalid choice.");
        }
    }
        
    public void showStats() {
        System.out.format("%s, the %s\nPhysical: %d\nMagical: %d\nTechnical: %d%n",
                      this.name,this.job,this.physical,this.magical,this.technical);
        }
        
    public void setName(String change) {
        this.name = change;
    }
    
    public void Soldier() {
        this.physical = 6;
        this.magical = 3;
        this.technical = 1;
        this.job = "Soldier";
    }
    
    public void Mage() {
        this.physical = 1;
        this.magical = 7;
        this.technical = 2;
        this.job = "Mage";
    }
    
    public void Technician() {
        this.physical = 1;
        this.magical = 2;
        this.technical = 7;
        this.job = "Technician";
    }
}

如果你真的想在命令行上手動編譯這些東西(不要那樣做 - 使用像 maven 這樣的構建系統):

確保您有一個“源根”目錄。 這是您系統上的某個目錄,例如/Users/emit/workspace/mygame ,例如cd game; cat MainCharacter.java cd game; cat MainCharacter.java可以工作(如包的子目錄,然后是源文件)。

通過手動明確列出每個源文件作為javac的參數(告訴你你想要一個構建系統)進行編譯,同時你在源代碼根目錄中。 所以:

cd /Users/emit/workspace/mygame
javac -cp ../lib/dep1.jar:../lib/dep2.jar game/Main.java game/MainCharacter.java

其中“dep1”和“dep2”是您正在使用的第三方庫(如果沒有,則不需要-cp或 rest。

然后,要運行它,請在該目錄中運行:

java -cp .:../lib/dep1.jar:../lib/dep2.jar game.Main

注意-cp. 部分,這很重要(只要堅持使用-cp.如果您沒有依賴項)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM