Zliczanie ilości wpisanych słów

Zliczanie ilości wpisanych słów
M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 123
0

Mam taki program:

Kopiuj
public class Str {
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String liniaTekstu = "";
		liniaTekstu = br.readLine();
		int ilosc = 0;
		String s[];
		
		do
		{
			s = liniaTekstu.split(" ");
			ilosc += s.length;
			liniaTekstu = br.readLine();
		}
		while (liniaTekstu != "");
		
		System.out.println("Wpisano " + s.length + " słów.");
	}
}
 

Problem polega na tym, że nie działa prawidłowo. Powinien zakończyć działanie po wpisaniu pustego wiersza. Jednak tak się nie dzieje. Nie wiem czemu. Proszę o pomoc.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

To jest java! Operator != porównuje referencje a nie wartości. Musisz użyć .equals()

M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 123
0

Poprawiłem, dzięki, ale nie wiem czemu, ale zlicza zawsze 1 wyraz, czemu?

Kopiuj
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Str {
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String liniaTekstu = "";
		liniaTekstu = br.readLine();
		int ilosc = 0;
		String s[];
		
		do
		{
			s = liniaTekstu.split(" ");
			ilosc += s.length;
			liniaTekstu = br.readLine();
		}
		while (liniaTekstu.equals(""));
		
		System.out.println("Wpisano " + s.length + " słów.");
	}
}
 
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Żartujesz sobie? Ukradli ci debugger? o_O MYŚl! Patrz co wypisujesz:

Kopiuj
System.out.println("Wpisano " + s.length + " słów.");

Wypisujesz s.length() a nie ilosc...

M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 123
0

Aha, faktycznie, ale nie wiem czemu, ale zlicza tylko 1 linijkę, dalej już nie:

Kopiuj
111111 2222 3 4 5 6 7 7 54 3 4 5 4
2 3 4 5 3 3
Wpisano 13 słów.
 
Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Warunek odwróć w pętli.

remigio
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 357
0

wywal to czytanie readLine przed pętlą "do" jest niepotrzebne(równocześnie będziesz musiał przenieść czytanie linii w pętli do przed split'a)

M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 123
0

Wielkie dzięki, już działa :)
PS.

Oto działający program:

Kopiuj
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Str {
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String liniaTekstu = "";
		liniaTekstu = br.readLine();
		int ilosc = 0;
		String s[];
		
		while (!liniaTekstu.equals(""))
		{
			s = liniaTekstu.split(" ");
			ilosc += s.length;
			liniaTekstu = br.readLine();
		}
		
		System.out.println("Wpisano " + ilosc + " słów.");
	}
}
 
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2520
0

jak wpiszesz od razu pusty wiersz to zwróci Ci 1 czy 0? Jak zrobisz gdzieś 2 spacje z rzędu to zwróci Ci dobry wynik?

iooi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 573
0

Na pewno działa i nie wywala przypadkiem NPE?

M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 123
0
krwq napisał(a)

jak wpiszesz od razu pusty wiersz to zwróci Ci 1 czy 0? Jak zrobisz gdzieś 2 spacje z rzędu to zwróci Ci dobry wynik?

Sprawdziłem, działa dobrze. Jak się wpisze " " to nie zlicza nic.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.