簡體   English   中英

類與方法有何不同? Java 無法識別外部類

[英]How do classes differ from methods? Java not recognizing external classes

為一個基本問題道歉,因為這是我第一次編程課。

我一直在討論這個這個,我肯定這是在引用我的問題,但有人可以分解這些是如何影響我的嗎?

通過反復試驗,我知道 shuffle 命令在課堂上運行良好。 但是,當我將其放入單獨的方法中時,它會停止工作。

    package pokemon.pkgcatch;


    public class PokemonCatch {

    public static void main(String[] args) throws IOException{

        {                                                                                                                                                                                                                         
    final String PlayerName; 
    int[][] MyPkmn;

    //Create a scanner to read input
    Scanner keyboard = new Scanner(System.in); 
    Scanner wildInput = new Scanner(new File("WildPkmn.txt"));
    Scanner myInput = new Scanner(new File("MyPkmn.txt"));

//Create a random object to roll die
    Random rand = new Random(); 


    System.out.print("Welcome to the world of Pokemon, Trainer! "
                     + " What is your name? ");
    //Intro. Save playerName variable and create a doc for player's Pkmn
    PlayerName = keyboard.nextLine();
    System.out.println("Here's your first Pokemon. It's a little weak"
                       + " but you'll just have to catch stronger ones.");

            /**
            try (PrintWriter writer = new PrintWriter("MyPkmn.txt")) {
                writer.println("int[][] MyPkmn =");
                writer.println("{1, 1, 2, 2, 2, 3}");
                writer.println("};");
            }
            */

    ArrayList<String> PokeBelt = new ArrayList<String>();   
            PokeBelt.add("{1, 1, 2, 2, 2, 3}");

    ArrayList<String> WildPkmn = new ArrayList<String>();
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");   
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");
            WildPkmn.add("{0, 0, 1, 1, 2, 2}");
            WildPkmn.add("{0, 2, 2, 3, 3, 4}");
            WildPkmn.add("{0, 2, 2, 3, 3, 4}");
            WildPkmn.add("{0, 2, 2, 3, 3, 4}");
            WildPkmn.add("{0, 2, 2, 3, 3, 4}");
            WildPkmn.add("{0, 18, 16, 12, 10, 8}");
            WildPkmn.add("{0, 18, 16, 12, 10, 8}");

    System.out.println("The tall grass has " +
                   WildPkmn.size() +
                   " arrays stored in it.");

    //    for (int index = 0; index < WildPkmn.size(); index++)
    //         System.out.println(WildPkmn.get(index));

    System.out.println("The Ultimate Pokemon is out there somewhere. " +
                 "It's your job to catch it!");

Collections.shuffle(WildPkmn);
System.out.println(WildPkmn);

encounter();
        }       }   

public static encounter()
{
Collections.shuffle(WildPkmn);
System.out.println(WildPkmn);
System.out.println("You take a walk in the tall grass.");

} 

你的問題與這兩個問題無關。 您正在嘗試訪問另一種方法的局部變量。 根據定義,這行不通,因為局部變量僅在聲明它們的方法中可見。

相反,您有兩個選擇:

  1. 在類中將變量聲明為靜態變量
  2. 或者,將變量作為方法參數傳遞。

此外,您在public staticencounter()之間錯過了void這個詞——Java 中的所有方法都需要有一個返回類型,即使它們什么都不返回——並且你的最終}需要移到文件的末尾——所有方法在 Java 中需要在一個類中。

不需要為一個問題而道歉。 在這種情況下,這里是詢問有關 Java 的正確位置。

從您發布的代碼中可以清楚地看出一件事。 您缺乏 Java 基礎知識,因此您應該學習該語言以理解它們。

什么地方出了錯

如果您編譯代碼,編譯器將向您顯示(語法)錯誤,如下所示。

  • 缺少進口

您在代碼中使用了ArrayList類,但尚未在任何地方定義此類 編譯器試圖在文件中搜索它的定義但失敗了,所以它不知道ArrayList的對象做了什么。

代碼中的一個示例是,您在ArrayList類型的WildPkmn對象上調用add()方法。

WildPkmn.add("{0, 0, 1, 1, 2, 2}");

ArrayList類是眾所周知的 Java 類,它在 java.util 包中定義 所以你需要導入這個類,以便編譯器可以參考這個定義。 這是通過import java.util.ArrayList語句完成的。

  • 方法定義

在 Java 中,每個方法都需要返回一個對象或一個值,或者……什么都沒有。 如果是后者,則返回void 這就是您在encounter()方法的定義中遺漏的內容。 你忘了返回void

最后,您在encounter()中使用了變量WildPkmn 這個變量是在main()內部定義的,它只在定義它的方法的范圍內可見(在main()的括號內)。 它在encounter()是不可見的。

您應該將此變量作為參數從main()傳遞給encounter() 請參閱下面此代碼的(語法上)正確版本,以檢查它是如何完成的。

package pokemon.pkgcatch;

// All the classes that you've used are imported here.
// Now the compiler knows where to look for their definitions.
import java.util.ArrayList;
import java.util.Collections;
import java.io.IOException;
import java.util.Scanner;
import java.util.Random;
import java.io.File;

 public class PokemonCatch {

   public static void main(String[] args) throws IOException{
     final String PlayerName;
     int[][] MyPkmn;

     //Create a scanner to read input
     Scanner keyboard = new Scanner(System.in);
     Scanner wildInput = new Scanner(new File("WildPkmn.txt"));
     Scanner myInput = new Scanner(new File("MyPkmn.txt"));

     //Create a random object to roll die
     Random rand = new Random();

     System.out.print("Welcome to the world of Pokemon, Trainer! "
                      + " What is your name? ");
     //Intro. Save playerName variable and create a doc for player's Pkmn
     PlayerName = keyboard.nextLine();
     System.out.println("Here's your first Pokemon. It's a little weak"
                        + " but you'll just have to catch stronger ones.");

     ArrayList<String> PokeBelt = new ArrayList<String>();
             PokeBelt.add("{1, 1, 2, 2, 2, 3}");

     ArrayList<String> WildPkmn = new ArrayList<String>();
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 0, 1, 1, 2, 2}");
             WildPkmn.add("{0, 2, 2, 3, 3, 4}");
             WildPkmn.add("{0, 2, 2, 3, 3, 4}");
             WildPkmn.add("{0, 2, 2, 3, 3, 4}");
             WildPkmn.add("{0, 2, 2, 3, 3, 4}");
             WildPkmn.add("{0, 18, 16, 12, 10, 8}");
             WildPkmn.add("{0, 18, 16, 12, 10, 8}");

     System.out.println("The tall grass has " +
                    WildPkmn.size() +
                    " arrays stored in it.");

     System.out.println("The Ultimate Pokemon is out there somewhere. " +
                  "It's your job to catch it!");

     Collections.shuffle(WildPkmn);
     System.out.println(WildPkmn);

     encounter(WildPkmn); // pass the variable WildPkmn to the encounter
  }

  public static void encounter(ArrayList<String> list /* Now the encounter() method expects a variable of type ArrayList*/){
    Collections.shuffle(list);
    System.out.println(list);
    System.out.println("You take a walk in the tall grass.");
  }
}

暫無
暫無

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

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