2

我的程序构建有问题。我似乎找不到我需要将构造函数放入的位置或原因。我不知道它是否在那里。无论如何,这是主要代码:

import java.io.FileNotFoundException;
import java.util.Scanner;

public class HangmanProject
{
    public static void main(String[] args) throws FileNotFoundException
    {
        public static void getFile() {

    getFile gf() = new getFile();
    Scanner test = gf.wordScan;      
   }     
}

这就是主程序,但它调用了这个:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Scanner;

public class getFile 
          {  
    String wordList[] = new String[10];    // array to store all of the words
    int x = 0;

    Scanner keyboard = new Scanner(System.in);    // to read user's input

    System.out.println("Welcome to Hangman Project!");

                                 // Create a scanner to read the secret words file
    Scanner wordScan = null;

    try {
        wordScan = new Scanner(new BufferedReader(new FileReader("words.txt")));
        while (wordScan.hasNext()) {
            wordList[x] = wordScan.next();  
            System.out.println(wordList[x]);  
            x++;  
                                   }
        } 
    finally {
        if (wordScan != null)
        {
            wordScan.close();
        }
    }
}

我的问题是:

  • 我的构造函数在哪里,
  • 我是否正确使用它,
  • 我的布局应该改变吗?

我的导师告诉我“我仍然没有在你的类中看到构造函数方法,你应该在其中为你的类初始化实例变量。你不能只将代码放在一个类中。” 我真的不明白那是什么意思。

4

5 回答 5

2

构造函数是在 Java 和其他 OO 语言中初始化对象的特殊子例程。如果您不声明构造函数,则类将具有隐式默认构造函数(不执行任何操作并返回)。

您的问题的评论中提到的代码的其他问题是它根本无法编译。您不能将代码放在不是字段或类声明的类主体中。不是类或字段声明的代码必须存在于构造函数、方法、静态方法、初始化程序或静态初始化程序中。

Oracle 自己的 Java 教程是开始学习 Java 语言的绝佳资源。这些教程可以在 Oracles 网站上找到,第一个教程(下面链接为 Trail:Getting Started)将帮助您编写和理解您的第一个 Java 程序。对于手头的特定问题,解释类和对象使用的教程(也在下面链接)将很有用。

一旦你走得更远,你可能会发现你可以就你卡住的概念提出更具体的问题。

路径:入门

课程:类和对象

Java 教程

于 2012-08-25T15:25:02.530 回答
1

您可以将 Constructor 假定为与类同名且没有返回类型的特殊方法。

所以如果类名是HangmanProject

构造函数应该是

public HangmanProject(){
}

其次,它应该在 this 是构造函数的类中......

class HangmanProject{
    public HangmanProject(){
    }
}

最后它也可以接受参数;你可以重载它们,即你可以在一个类中有多个构造函数。

class HangmanProject{
    Integer attemptsLeft;
    public HangmanProject(){
        attemptsLeft = 10;
    }

    public HangmanProject(Integer attempts){
        this.attemptsLeft = attempts;
    }

}

构造函数的用途也是初始化类的字段。

以您的其他课程为例...

public class GetFile {    //  Changed as per naming convention...

     String wordList[];
     int x;
     Scanner keyboard = null;    // to read user's input
     Scanner wordScan = null;

     public GetFile(){     // Here is the constructor
         this.wordList = new String[10];
         this.x=0;
     }

}

希望这对你有帮助!!!

于 2012-08-25T15:29:14.587 回答
1

不同的 Java 程序员在他们的编程方式上可以有不同的风格和方法。通过使用标准的 Java 命名约定,他们使他们的代码更容易为他们自己和其他程序员阅读。Java 代码的可读性很重要,因为这意味着花费更少的时间试图弄清楚代码的作用,从而留出更多的时间来修复或修改它。

为了说明这一点,值得一提的是,大多数软件公司都有一份文档,其中概述了他们希望程序员遵循的命名约定。熟悉这些规则的新程序员将能够理解可能在多年前离开公司的程序员编写的代码。

Java 编程语言的代码约定

于 2012-08-25T15:45:25.733 回答
1

首先,我对您的程序进行了一些修改。您的第一个大错误是您有一个名为 getFile 的类,还有一个名为 getFile 的方法。保留方法名作为方法名,但类名通常大写。我将其更改为 GetFile。

import java.util.*;
import java.io.*;
public class HangmanProject{
   public static void main(String[] args) throws FileNotFoundException{ //this is the first thing that runs, the main method
      GetFile gf = new GetFile();  //this will create the getFile object
      try {
         gf.getWords(); //runs the method that we make later
      }
      catch(FileNotFoundException potatoes) {   //this will print out error message if there is no words.txt
         System.out.println(potatoes.getMessage());
      }                                
    } //closes main method
}

好的; 现在到实际的类本身。

import java.util.*;
import java.io.*;
public class GetFile {        
    //Here are your variables
    private String[] wordList = new String[10];   
    private int x = 0;                             
    //good practice to have variables private;
    //Now it is time for the constructor.
    public GetFile() 
       { 
     //empty constructor; you don't need to have any instance variables declared.
       } 
    public void getWords() throws FileNotFoundException {  //the big method for doing stuff
        Scanner keyboard = new Scanner(System.in);    // to read user's input
        System.out.println("Welcome to Hangman Project!");
        Scanner wordScan = null;
        wordScan = new Scanner(new File("words.txt"));
        while (wordScan.hasNext()) { //checking if there are more words
            wordList[x] = wordScan.next();  
            System.out.println(wordList[x]);  //print them out as the array is filled
            x++;  
            }
        if (wordScan != null)
           {
           wordScan.close(); //close the file after you are finished
           }
    }
}
于 2012-08-25T16:08:13.943 回答
0

这是我尝试解决您如何使用 java 的大多数问题的示例 :-) 将来考虑特别使用 Eclipse 之类的 IDE 进行编程http://www.eclipse.org/downloads/并在尝试更多之前学习 java 的基础知识复杂的事情。

将“Hello world”打印到控制台是首先要走的路,然后逐步前进,创建另一个类可能两个,创建它们的一些实例并使它们也打印消息到控制台。不要急于求成!学习基础知识是你未来遇到的每一种语言的必修课,祝你旅途愉快!:)

主.java

   public class Main
    {
        public static void main(String[] args)
        {

          System.out.println("Welcome to Hangman Project!");

          // lets initialize your FileHandler class, this will call its constructor btw.
          FileHandler fileHandler = new FileHandler();

          // and lets call its method after that
          fileHandler.readFile();

       }     

    }

文件处理程序.java

public class FileHandler{

   // place for your attributes belonging to full class

   // Im the constructor
   public FileHandler() {
         // you can do something here like your initializations for attributes
         System.out.println("FileHandler instance created!");
   }

   public void readFile() {
         // do your file reading here
         System.out.println("FileHandler readfile() called!");
   }

}

于 2012-08-25T15:42:39.570 回答