2013-06-21 3 views
2

Я искал и не могу найти нигде, как написать число слов, используя 3 метода. Вот как выглядит код до сих пор. Я теряюсь в том, как использовать методы. Я могу сделать это, не используя разные методы и просто используя один. Пожалуйста помоги!!!напишите код, чтобы найти количество слов в строке, используя методы

public static void main(String[] args) { 
    Scanner in = new Scanner (System.in); 
    System.out.print("Enter a string: "); 
    String s = in.nextLine(); 
    if (s.length() > 0) 
    { 
     getInputString(s); 
    } 
    else 
    { 
     System.out.println("ERROR - string must not be empty."); 
     System.out.print("Enter a string: "); 
     s = in.nextLine(); 
    } 
    // Fill in the body with your code 
} 

// Given a Scanner, prompt the user for a String. If the user enters an empty 
// String, report an error message and ask for a non-empty String. Return the 
// String to the calling program. 
private static String getInputString(String s) { 
    int count = getWordCount(); 
    while (int i = 0; i < s.length(); i++) 
    { 
     if (s.charAt(i) == " ") 
     { 
      count ++; 
     } 
    } 
    getWordCount(count); 
    // Fill in the body 

    // NOTE: Do not declare a Scanner in the body of this method. 
} 


// Given a String return the number of words in the String. A word is a sequence of 
// characters with no spaces. Write this method so that the function call: 
//  int count = getWordCount("The quick brown fox jumped"); 
// results in count having a value of 5. You will call this method from the main method. 
// For this assignment you may assume that 
// words will be separated by exactly one space. 
private static int getWordCount(String input) { 
    // Fill in the body 
} 

} 

EDIT: Я изменил код

private static String getInputString(String s) { 
    String words = getWordCount(s); 
    return words.length(); 
} 


private static int getWordCount(String s) { 
    return s.split(" "); 
} 

Но я не могу получить строку преобразовать в целое число.

+1

выглядит, как вы используете методы хорошо, какие проблемы вы имеете с использованием методов? – Stephan

+2

Здесь можно задать конкретные вопросы, но мы не собираемся делать домашнее задание. Пожалуйста, будьте предельно ясны в том, что вы пробовали, и где вы застряли. –

+1

'if (s.charAt (i) ==" ")' всегда будет ложным, поскольку вы спрашиваете, является ли char тем же объектом, что и String. '' ''будет представлять пробел как символ. – Edd

ответ

0

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

String sentence = "This is a sentence."; 
String[] words = sentence.split(" "); 

for (String word : words) { 
    System.out.println(word); 
} 

, то вы можете сделать:

numberOfWords = words.length(); 

, если вы хотите использовать 3 метод, вы можете вызвать метод из вашего main() метода, который делает это для вас, например:

public String getInputString() { 

    Scanner in = new Scanner (System.in); 
    System.out.print("Enter a string: "); 
    String s = in.nextLine(); 
    if (s.length() > 0) { 
     return s; 
    } else { 
     System.out.println("ERROR - string must not be empty."); 
     System.out.print("Enter a string: "); 
     return getInputString(); 
    } 
} 

public int wordCount(String s) { 

    words = splitString(s) 

    return words.length(); 
} 

public String[] splitString(String s) { 

    return s.split(" "); 
} 
+0

Я могу сделать это одним методом, но я должен использовать 3. – user2509405

+0

umm, в этом случае у вас может быть один метод для приема строки, которая переходит к указанному здесь методу wordcount, который вызывает метод, который разбивает строку – Stephan

+0

@ user2509405 вот ты, я сделал 3 метода для тебя – Stephan

0

Используйте String.split() метод как:

String[] words = s.split("\\s+"); 
int wordCount = words.length; 
1

Использование trim() и split() на 1-н пробельных символов:

private static int getWordCount(String s) { 
    return s.trim().split("\\s+").length; 
} 

Вызов trim() необходимо, в противном случае вы получите один дополнительный «слово «если в строке есть ведущие пробелы.

Параметр "\\s+" необходим для подсчета нескольких пробелов в качестве разделителя одного слова. \s является регулярным выражением для «пробелов». + - это регулярное выражение для «1 или больше».

+0

Прежде всего, это не скомпилируется. Во-вторых, он должен что-то узнать. –

+0

@ RosdiKasim упс! Я скопировал неправильную подпись метода (исправлена). Кроме того, он что-то изучает сейчас, когда добавил некоторые объяснения? – Bohemian

+0

@ RosdiKasim: Ну, он что-то пробовал, поэтому мы ответили –

1

Вы можете сделать это:

private static int getWordCount(String input) { 
    return input.split("\\s+").length; 
} 
+0

Я пытаюсь перенести строку из первого метода в getIntputString. И это дает мне ошибку, что ее неприменимо, и ее правильное построение. Затем, чтобы получить метод getWordCount. Я не могу получить код для перехода к следующему методу. – user2509405

+1

Я мог бы предложить '' \\ s + "', а не '' ''. Простое расщепление точно на '' u0020' почти наверняка допустило бы ошибку в этом комментарии, например, потому что я обычно использую два пробела после периодов. Но общая идея хорошая. – cHao

+0

[@ user2509405] (http://stackoverflow.com/users/2509405/user2509405) Вы можете скопировать прошлую точную ошибку – user2509423

3

Вы прочли имя метода, и посмотрите на комментарии, чтобы решить, что должно быть реализовано внутри метода, а значения она должна возвращать.

getInputString метод подпись должна быть:

private static String getInputString(Scanner s) { 

    String inputString = ""; 

    // read the input string from system in 
    // .... 

    return inputString; 

} 

getWordCount метод подпись должна быть:

private static int getWordCount(String input) { 

    int wordCount = 0; 

    // count the number of words in the input String 
    // ... 

    return wordCount; 
} 

Метод main должен выглядеть примерно так:

public static void main(String[] args) { 

    // instantiate the Scanner variable 

    // call the getInputString method to ... you guessed it ... get the input string 

    // call the getWordCount method to get the word count 

    // Display the word count 
} 
1

Что вы необходимо сделать, подсчитайте количество пробелов в строке. Это число слов в строке.

Вы увидите, что ваш счет будет отключен на 1, но после некоторых размышлений и поиска ошибок вы поймете, почему.

Счастливое обучение!

+1

К сожалению. Этот комментарий содержит двадцать три пробела, если вы просматриваете источник. Но есть только двадцать один слова. Не каждое пространство отделяет слова. – cHao

+0

@cHao, Вы прочитали комментарий выше своего метода 'getWordCount'? ** Для этого задания вы можете предположить, что слова будут разделены ровно одним пробелом. ** –

+0

На самом деле я этого не сделал. Я склонен подсознательно фильтровать комментарии; они почти невидимы для меня, если только они не указаны, или они чрезмерны или смешны. – cHao

0

на основе кода я думаю, что это то, что вы пытаетесь сделать:

private static int getWordCount(String input) { 

    int count = 0; 

    for (int i = 0; i < input.length(); i++) { 
     if (input.charAt(i) == ' ') { 
      count++; 
     } 
    } 

    return count; 
} 

Вот что я сделал:

  • Я переместил код, который вы были «играть 'с правильным методом (getWordCount).
  • Исправленная петлю, которую вы пытаетесь использовать (я думаю, что у вас есть для и в то время как петли запутанные)
  • Фиксированные чек на символ пробела (' ' не " ")

Существует ошибка в этом коде которые вы должны будете работать, как решить проблему:

  • getWordCount("How are you"); возвратит 2, когда она должна быть 3
  • getWordCount(""); возвратит 0
  • getWordCount("Hello"); возвращает 0, когда он должен быть 1

Успехов!

+0

Казалось бы, код, поставленный в вопросе, был изменен, так как я опубликовал это – Edd

+0

Да ... по какой-то причине код, который на самом деле подсчитал бы слова, был удален. Я думал о возвращении. – cHao

0

Лучше использовать простую функцию пролитых() с аргументами в пространстве

int n= str.split(" ").length; 
2
    count=1 //last word must be counted 
       for(int i=0;i<s.length();i++) 
       { 
        ch=s.charAt(i); 
        if(ch==' ') 
        { 
        count++; 
        } 
       }    
+0

Объяснение будет приятным, также это тот же код, что и op. –

0
public static int Repeat_Words(String arg1,String arg2) 
{ 
    //It find number of words can be formed from a given string 

    if(arg1.length() < 1 || arg2.length() < 1) 
     return 0; 

    int no_words = 99999; 
    char[] str1 = arg1.toCharArray(); 
    char[] str2 = arg2.toCharArray(); 


    for(int x = 0; x < str1.length; x++) 
    { 
     int temp = 0; 
     for(int y = 0; y < str2.length; y++) 
     { 
      if(str1[x] == str2[y]) 
      temp++; 
     } 
     if(temp == 0) 
      return 0; 
     if(no_words > temp) 
      no_words = temp; 

     temp = 0; 
    } 

    return no_words; 
} 
Смежные вопросы