[英]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.");
}
你的問題與這兩個問題無關。 您正在嘗試訪問另一種方法的局部變量。 根據定義,這行不通,因為局部變量僅在聲明它們的方法中可見。
相反,您有兩個選擇:
此外,您在public static
和encounter()
之間錯過了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.