radhikay Ответов: 1

Получение неожиданного результата для конкретного случая


import java.util.Scanner;

public class WordCount {
	 public static void main(String args[])
	    {
	        String text;
	        int countWords=0;
	         
	        Scanner SC=new Scanner(System.in);
	         
	        System.out.print("Enter string: ");
	        text=SC.nextLine();
	         
	        //word count
	        for(int i=0; i<text.length()-1; i++)
	        {
	            if(text.charAt(i)==' ' && text.charAt(i+1)!=' ')
	                countWords++;
	        }
	         
	        System.out.println("Total number of words in string are: "+ (countWords+1));
	        //since last word does not contain and character after that
	                     
	    }
}


Что я уже пробовал:

У меня есть приведенный выше код для подсчета количества слов в строке.

2 случая, которые я пробовал:

корпус 1 :
Enter string: hello java
Total number of words in string are: 2


случай 2 :
Enter string:    hello   java
Total number of words in string are: 3


Случай 1 дает ожидаемый ответ. Но для случая 2 я вставил пробелы в начале и между словами. Я получил результат 3, но ожидал, что будет 2 .

В соответствии с логином счетчик должен быть увеличен, если текущий символ-пробел, а следующий-не пробел. Кто-нибудь может это объяснить?

1 Ответов

Рейтинг:
0

Richard MacCutchan

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


radhikay

У меня есть решение для удаления пробелов с помощью метода trim (). - что дает мне правильный ответ для случая 2

Но в соответствии с вашим решением "начинайте новый подсчет только тогда, когда встречается не-пространство", я уже использовал эту логику, как показано ниже
если(текст.используя метод charat(я)==' ' &&усилителя; текст.используя метод charat(я+1)!=' ')
счетчик увеличивается только тогда, когда текущий индекс в пространстве и следующий индекс не являются пространством.

Richard MacCutchan

Вы имеете дело только с тем случаем, когда есть два пространства. А как насчет случая, когда есть три пробела или триста?

radhikay

У меня возникли проблемы с пробелами в начале предложения. так что метод trim() мне поможет.

Пожалуйста, скажите мне решение, я не получаю идеи

Richard MacCutchan

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

radhikay

Я попробую это сделать . спасибо