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 言語の学習を開始するための優れたリソースです。これらのチュートリアルはオラクルの Web サイトで見つけることができます。最初のチュートリアル (以下に Trail: Getting Started としてリンクされています) は、初めて Java プログラムを作成して理解するのに役立ちます。当面の特定の問題については、クラスとオブジェクトの使用を説明するチュートリアル (以下にもリンクされています) が役立ちます。

さらに進んでいくと、行き詰まっている概念について、より具体的な質問をすることができることに気付くかもしれません。

トレイル: はじめに

レッスン: クラスとオブジェクト

Java チュートリアル

于 2012-08-25T15:25:02.530 に答える
1

コンストラクターは、クラスと同じ名前で戻り値の型のない特別なメソッドと見なすことができます。

したがって、クラス名がHangmanProject

コンストラクターは

public HangmanProject(){
}

次に、これがコンストラクターであるクラス内にある必要があります...

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をどのように使用したかという問題のほとんどを修正しようとした例です:-) 将来的には、http: //www.eclipse.org/downloads/をプログラミングするために特にEclipseのようなIDEを使用することを考え、さらに試す前にJavaの基本を学びます複雑なこと。

「Hello world」をコンソールに出力する方法は、まず最初に行ってから、少しずつ進めて、別のクラスをおそらく 2 つ作成し、それらのインスタンスをいくつか作成して、コンソールにもメッセージを出力するようにします。物事を急がないでください!基礎を学ぶことは、将来遭遇するすべての言語で必須です。あなたの旅を頑張ってください! :)

Main.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();

       }     

    }

FileHandler.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 に答える