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

时间:2018-12-05 20:16:57

标签: java class methods

对一个基本问题的道歉,因为这是我有史以来第一次编程课。

我已经过去了 thisthis,我很肯定这是在指我的问题,但有人可以细分这些对我的影响吗?

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

} 

2 个答案:

答案 0 :(得分:1)

您的问题与这两个问题无关。您正在尝试访问其他方法的局部变量。根据定义,这是行不通的,因为局部变量仅在声明它们的方法内可见。

相反,您有两个选择:

  1. 在您的课程中将变量声明为静态变量
  2. 或者,将变量作为方法参数传递。

此外,您在voidpublic static之间缺少encounter()一词-Java中的所有方法都必须具有返回类型,即使它们什么也不返回-以及最终的{{ 1}}需要移到文件末尾-Java中的所有方法都必须在一个类中。

答案 1 :(得分:1)

无需为这个问题道歉。在这种情况下,这里是提出有关Java问题的正确位置。

从您发布的代码中可以明显看出一件事。您缺乏Java基础知识,因此您应该学习该语言以理解它们。

出了什么问题

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

  • 缺少进口商品

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

代码中的一个示例是在add()类型的WildPkmn对象上调用ArrayList方法。

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

ArrayList类是一个著名的Java类,它是defined in the java.util package。因此,您需要导入此类,以便编译器可以引用此定义。这是通过import java.util.ArrayList语句完成的。

  • 方法定义

在Java中,每个方法都需要返回一个对象或一个值,或者……什么也没有。如果是后者,则返回void。这就是您在encounter()方法的定义中所缺少的。您忘记返回void

最后,您正在WildPkmn内使用变量encounter()。该变量在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.");
  }
}