Что я делаю не так - не могу создать экземпляр объекта из Main (пользовательский класс) - PullRequest
1 голос
/ 03 мая 2011

Руки вверх, я борюсь с вопросом о программировании для M257 в OU, он является формирующим и не несет никаких оценок и должен быть получен через несколько дней. Я не могу вызвать конструктор из тестового класса и несколько часов боролся безрезультатно, класс компилируется в Netbeans 6.91 нормально, но конструктор не создает объект. Что я делаю не так?

У меня не было проблем с первым вопросом, но я застрял здесь, явно упустив что-то важное - руководство, пожалуйста. Идея состоит в том, чтобы передать имя файла классу, я могу сделать все остальное, когда узнаю, что файл открыт и сканер инициализирован.

===============
/**
 * Title: WordCounter class
 * Description: M257 TMA01, Q2 - word counter class as described in instructions
 * @author Andrew Broxholme
 */

package tma01q2;

import java.io.*;
import java.util.*;


public class WordCounter
{  
    //Class instance variables
    public static int totalWords;
    public static int totalEven;
    public static int totalOdd;
    public static int totalLetters;

    private Scanner fileScanner;
    String sourceFile;
    String line;    //The lines of the text file

    //Single argument constructor, accepts source filename
    public boolean WordCounter(String fileToRead)
    {
        sourceFile = fileToRead;
        try
        {
            openRead();
            while (fileScanner.hasNext())
            {
                // Process each line of the text file
                line = fileScanner.nextLine();
                System.out.println(line);
       //         countWords();
            }
            return true;
        }
        catch (Exception exp)
        {
            return false;
        }
        finally
        {
            fileScanner.close();
        }
    }

    //openRead, opens the file and processes each line of the file until finished
    private boolean openRead() throws IOException
    {
        try
        {
            fileScanner = new Scanner(sourceFile);
            return true;
        }
        catch (Exception exp)
        {
            return false;
        }
    } 
    // More methods to be added   
}

/*
 * TestWordCounter.
 * Description: Tests the WordCounter class as per TMA01q2 instructions
 * @author Andrew Broxholme
 * V1.0 30th April 2011
 */

package tma01q2;

public class TestWordCounter
{
   //Create a WordCounter to process the specified text file.
   public static void main(String[] args)
   {
      String testFile = "haiku.txt";
      WordCounter fileStats = new WordCounter(testFile);
   }
}

Когда я пытаюсь скомпилировать, это то, что он передает.

Compiling 1 source file to C:\M257\TMA01\TMA01Q2\build\classes
C:\M257\TMA01\TMA01Q2\src\tma01q2\TestWordCounter.java:18: cannot find symbol
symbol  : constructor WordCounter(java.lang.String)
location: class tma01q2.WordCounter
      WordCounter fileStats = new WordCounter(testFile);
1 error
C:\M257\TMA01\TMA01Q2\nbproject\build-impl.xml:246: The following error occurred while executing this line:
C:\M257\TMA01\TMA01Q2\nbproject\build-impl.xml:113: Compile failed; see the compiler error output for details.

Я не отказался от этого и обновлю вопрос, если сначала найду ответ.

8 мая 2011: Ответы были полезны, но в конце концов, хотя в конце я отказался от этого вопроса, я понял, что просто недостаточно знаю о том, как подклассы наследуются от суперклассов, и мне нужно попробовать более простые (и для меня более значимые) примеры, чтобы углубить мое понимание. Проблема, однако, заключалась в том, что NetBeans слишком хорошо предлагал то, что вам нужно, не говоря вам точно, почему он делает то, что делает, хорошо, если вы опытный Java-разработчик, но не так хорошо, если вы только начинаете.

Я уже начал (то есть читаю краткое изложение) для TMA02 и отдам себя целых два месяца, гораздо более здравомыслящий человек думает!

Ответы [ 2 ]

8 голосов
/ 03 мая 2011

Это не конструктор. Удалите boolean в качестве возвращаемого типа - конструкторы не имеют возвращаемых типов. Итак:

public WordCounter(String fileToRead)

вместо

public boolean WordCounter(String fileToRead)

И вот что говорит вам ошибка - компилятор не может найти конструктор с таким именем.

См .: конструкторы

1 голос
/ 03 мая 2011

подпись конструктора неверна.

public WordCounter(String fileToRead)
{
     sourceFile = fileToRead;
     try
      {
            openRead();
            while (fileScanner.hasNext())
            {
                // Process each line of the text file
                line = fileScanner.nextLine();
                System.out.println(line);
       //         countWords();
            }
            return true;
        }
        catch (Exception exp)
        {
            return false;
        }
        finally
        {
            fileScanner.close();
        }
    }

используйте конструктор вот так.Заменить подпись конструктора на

public WordCounter(String fileToRead)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...