[Java] Scanner.hasNext()

Status
Niet open voor verdere reacties.

niekfct

Terugkerende gebruiker
Lid geworden
19 jul 2006
Berichten
1.563
Hoi

Ik moet voor school een programmaatje schrijven met een data-invoer (met behulp van java.util.Scanner). Het programma wordt via prompt uitgevoerd en van daar moet ook de data ingevoerd worden.

Nu moet ik een ingevoerde zin binnenkrijgen, deze in woorden verdelen, en deze op een aparte regel weergeven. Als het programma "einde" tegenkomt, moet hij stoppen. Als het einde van de regel is bereikt, moet de nummering hersteld worden en het programma weer opnieuw beginnen.
Nou zit ik alleen nog met het probleem, hoe kan ik checken of het einde van de regel is bereikt? Ik heb het volgende geprobeerd:

PHP:
package week3;

import java.util.Scanner;

public class Woorden
{
	private static Scanner in = new Scanner(System.in);

	public static void main(String[] args)
	{
		int i=1;
		String regel;
		System.out.print("Zin (of \"einde\"): ");
		while (in.hasNextLine() && !((regel = in.next()).equals("einde")))
		{
			if(!regel.equals(" ")) //hier zou ik checken of het einde van de regel is bereikt.
			{
			System.out.println("Woord " + i + ": " + regel + ".");
			i++;
			}
			else
			{
				i =0;
				System.out.print("Zin (of \"einde\"): ");
			}
		}
		System.out.print("Einde Programma.");
	}
}

wie kan mij uit de brand helpen? In theorie zou ik in.hasNext() kunnen gebruiken, maar ik zit met string regel, en als ik if(in.hasNext()) probeer, blijft hij daar steken ipv naar de else te gaan.:confused:
 
Laatst bewerkt:
Probeer voor de grap eens.
Code:
if(!(in.hasNext() == false)){

}
Is misschien niet al te netjes, maar dat soort constructies willen nog wel eens helpen hierin.
 
Heb ik geprobeerd, dit werkt niet, en daardoor loopt alles 1 regel achter. Hij wacht dan namelijk nog eens bij in.hasNext() totdat er daadwerkelijk invoer komt, en dat is niet de bedoeling :confused: Heb die regel laten staan, en de regel in de while veranderd.
Heb nu het volgende:

PHP:
package week3;

import java.util.Scanner;

public class Woorden
{
	private static Scanner in = new Scanner(System.in);

	public static void main(String[] args)
	{
		boolean a = true;
		int i=1;
		String regel;
		System.out.print("Zin (of \"einde\"): ");
		while (in.hasNextLine() && a)//!((regel = in.next()).equals("einde"))
		{
			if(!(in.hasNext() == false))
			{
				regel = in.next();
				if (!regel.equals("einde"))
				{
				System.out.println("Woord " + i + ": " + regel + ".");
				i++;
				}
				else
					a = false;
			}
			else
			{
				i =0;
				System.out.print("Zin (of \"einde\"): ");
			}
		}
		System.out.print("Einde Programma.");
	}
}

Zolang er een regel is (daar wacht hij op) en boolean a is true, doet ie de loop. Daarin gaat hij kijken of er nog een woord in 'in' staat. zoja, kijkt hij of dit woord niet "einde" is, anders is boolean a false en zal hij de while-lus stoppen. Als dit geen "einde" is, print hij de zin, en telt hij 1 bij i op.

Als er geen woord meer in 'in' staat, zou hij naar de else moeten gaan, waar hij i op 0 zet, en opnieuw zou moeten beginnen, maar dit werkt niet. Dit is de output:

Code:
Zin (of "einde"): [U]Hallo dit is een test.[/U]
Woord 1: Hallo.
Woord 2: dit.
Woord 3: is.
Woord 4: een.
Woord 5: test..
[U]Hallo dan[/U]
Woord 6: Hallo.
Woord 7: dan.
[U]einde[/U]
Einde Programma.

Wat had moeten zijn:

Zin (of "einde"): [U]Hallo dit is een test.[/U]
Woord 1: Hallo.
Woord 2: dit.
Woord 3: is.
Woord 4: een.
Woord 5: test..
Zin (of "einde"): [U]Hallo dan[/U]
Woord 1: Hallo.
Woord 2: dan.
Zin (of "einde"): [U]einde[/U]
Einde Programma.
Het onderstreepte is door de gebruiker ingetypt.
 
Laatst bewerkt:
Na lang knutselen ben ik er dan toch uit:

PHP:
package week3;

import java.util.Scanner;

public class Woorden
{
	private static Scanner in = new Scanner(System.in);

	public static void main(String[] args)
	{
		boolean a = true;
		int i=1;
		String regel;
		Scanner regelScanner;

		System.out.print("Zin (of \"einde\"): ");
		while (a && in.hasNextLine())// && a)//!((regel = in.next()).equals("einde"))
		{
			regelScanner = new Scanner(in.nextLine());
				while(a && regelScanner.hasNext())
				{
					regel = regelScanner.next();
					if (!regel.equals("einde"))
					{
						System.out.println("Woord " + i + ": " + regel);
						i++;
					}
					else
					{
						a = false;
					}
				}
				
				i=1;
				System.out.print("Zin (of \"einde\"): ");
		}
		System.out.print("Einde Programma.");
	}
}
 
Maar wat als de gebruiker intypt "Is het einde nabij".. Dit is een zin en niet "einde":D
 
Ah oké, heb nu dus if (!regel.equals("einde") && i != 1)) :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan