【问题标题】:How do classes differ from methods? Java not recognizing external classes类与方法有何不同? Java 无法识别外部类
【发布时间】:2018-12-05 20:16:57
【问题描述】:

抱歉,这是我第一次上编程课。

我已经过去了 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.");

} 

【问题讨论】:

    标签: java class methods


    【解决方案1】:

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

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

    出了什么问题

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

    • 缺少导入

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

    您的代码中的一个示例是您在WildPkmnobject 上调用add() 方法,该对象的类型为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

    最后,您在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.");
      }
    }
    

    【讨论】:

      【解决方案2】:

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

      相反,您有两种选择:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        相关资源
        最近更新 更多