类与方法有何不同?Java无法识别外部类



为一个基本问题道歉,因为这是我的第一个编程类。

我已经过去了这个和这个,我确信这是指我的问题,但有人能分解这些对我的影响吗?

通过反复试验,我知道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.");
} 

不需要为问题道歉。在这种情况下,这里是询问有关Java的问题的正确位置。

从你发布的代码中可以清楚地看到一件事。您缺乏Java基础知识,因此您应该学习该语言才能理解它们。

出了什么问题

如果您编译代码,编译器将显示(语法(错误,如下所示。

  • 缺少导入

您正在代码中使用ArrayList,但尚未在任何地方定义此类。编译器试图在文件中搜索其定义,但失败了,因此它不知道ArrayList的对象做什么。

代码中的一个示例是在类型为ArrayListWildPkmn对象上调用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.");
}
}

您的问题与这两个问题无关。您正试图访问另一个方法的局部变量。根据定义,这是行不通的,因为局部变量只在声明它们的方法中可见

相反,您有两个选项:

  1. 在类中将变量声明为静态变量
  2. 或者,将变量作为方法参数传递

此外,public staticencounter()之间缺少单词void-Java中的所有方法都需要有一个返回类型,即使它们什么都不返回-并且最终的}需要移动到文件的末尾-Java中所有方法都必须在一个类内。