Справка по программированию на Java - PullRequest
0 голосов
/ 28 мая 2010

Я немного запутался в этом, и я не знаю, как решить этот вопрос, который мне задавали. Буду признателен, если вы поможете мне в этом вопросе, возможно, попытайтесь сказать мне, что нужно сделать и как. вопрос:

Напишите метод countChars, который принимает InputStream в качестве параметра, читает поток и возвращает количество символов, которые он содержит, как int. Любые исключения IOException, которые могут возникнуть в методе, должны быть переданы вызывающей стороне метода.

Обратите внимание, что заголовок метода должен показывать, что возможно возникновение исключения.

Я попытался ответить на этот вопрос с помощью следующего кода:

public class countChars

{


public int countChars(int InputStream)
{
  return InputStream;

}


}

и я получаю сообщение об ошибке:

Main.java:26: cannot find symbol
symbol  : method countChars(java.io.InputStream)
location: class Main
        s1 = "" + countChars(f1);
                  ^
1 error

Ответы [ 7 ]

3 голосов
/ 28 мая 2010
public class CounterUtility
{
    public static Integer countChars(InputStream in)
    {
        Integer counter = 0;

        /* your code here */

        return counter;
    }
}

s1 = CounterUtility.countChars(f1).toString();

2 голосов
/ 28 мая 2010

Вы перепутали пару вещей. Например, ваша функция будет принимать InputStream и возвращать int. Ваша функция настроена на прием int с именем InputStream и возврат int.

InputStream имеет функцию read (), которая загружает следующий символ потока (или -1, если нет оставшихся символов). Вам нужно определить целочисленный счетчик, а затем вызывать read () столько раз, сколько потребуется, чтобы получить этот ответ -1. Как только вы видите -1, вы знаете, что находитесь в конце потока и можете вернуть счетчик (который будет иметь значение, равное количеству символов).

//take in an InputStream object and return an int
public int countChars(InputStream input){
   int counter = 0; //start counting at zero
   while (input.read() != -1){
       //as long as there are more characters, keep incrementing the counter
       counter++; //add one to the counter
   }
   return counter; //return the result
}

Я никогда не пытался скомпилировать приведенный выше код, и я не писал на Java с колледжа, поэтому могут быть синтаксические ошибки.

0 голосов
/ 28 мая 2010

Несколько баллов.Обычно считается хорошей практикой использовать все классы Java с заглавной буквы.Вы не обязаны это делать, но когда вы этого не делаете, это делает читабельность намного труднее для остального мира.

Так что публичный класс countChars становится публичным классом CountChars.

Во-вторых, вы пытаетесь вызвать метод объекта, но не указываете, какой объект вы хотите использовать.Как правило, вы не можете использовать метод сам по себе в объектно-ориентированном программировании, вы должны указать класс, а затем метод для вызова класса.Это делается одним из двух способов:

  1. Путем создания Object (экземпляр класса) и вызова метода для этого объекта, например, так:
CountChars counter = new CountChars();
s1 = "" + counter.countChars(i);
Объявляя метод статическим, что означает, что он будет методом для объекта "Class", CountChars.Для вызова статического метода используется имя класса, например:
s1 = "" + CountChars.countChars(i);
0 голосов
/ 28 мая 2010

Перво-наперво: в Java имена классов всегда должны быть заглавными.

Во-вторых, код, который вы запускаете, находится в классе Main. Ваш метод countChars относится к классу countChars. Вам нужно создать countChars объект для его вызова или сделать countChars static методом, который будет вызываться через countChars.countChars(intHere).

В-третьих, int InputStream будет целочисленным значением с именем InputStream, а не InputStream объектом.

0 голосов
/ 28 мая 2010

Похоже, что вы компилируете не тот файл. Пример кода, который вы включили, не содержит код из сообщения об ошибке. Поэтому я пришел к выводу, что компилятор не работает с исходным файлом, который, как вы полагаете, является (если вы точно скопировали / вставили используемый код).

0 голосов
/ 28 мая 2010

Ошибка, вероятно, связана с тем, что метод countChars не был успешно скомпилирован. Если вы просмотрите остальную часть вывода компилятора, вы, вероятно, увидите, что он жалуется на оператор return. Замените возврат заглушки на return 0, и он должен пройти.

Кроме того, вы не должны использовать InputStream в качестве имени переменной. Используйте is или что-то подобное.

Кроме того, если метод должен принимать InputStream в качестве аргумента, подпись должна быть

public int countChars(InputStream is) { ...
0 голосов
/ 28 мая 2010

Ваш countChars метод находится внутри класса с именем countChars.
Когда вы вызываете метод, вам нужен экземпляр класса.

Вам нужно сделать метод static, затем изменить вызов на countChars.countChars(f1).

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