String.equals

Status
Niet open voor verdere reacties.

Sven2007

Gebruiker
Lid geworden
8 feb 2007
Berichten
113
ik heb deze eenvoudige methode die een ingegeven string ingave controleert en vervolgens iets uitvoert. Alles lukt, behalve ingave.equals("stop") lukt niet.
Code:
public void controleerinvoer() {

		if(ingave.equals("help")){
			help();
		}else if (ingave.substring(0,4).equals("setm")){
			memory();
		}else if (ingave.substring(0,7).equals("display")){
			display();
		}else if (ingave.equals("stop")){
			stop();
		}
		else{
			berekening();
		}
	}
Kan iemand mij hierbij helpen ?
 
Laatst bewerkt door een moderator:
Wat werkt er niet? Komt ie nooit in die if, ook al voer je "stop" in?

Misschien kan je de variabele "invoer" outputten (System.out.println()), om zo te kijken welke waarde het bevat.
 
Hij gaat gewoon nooit in die if als ik stop intik. Als ik bv help intik kom ik wel in de juiste if.

Ik snap echt niet wat er fout is aan de code...
 
Als je de variable invoer output, via System.out.println() (oid), wat zegt ie dan?
 
En als je ingave.equals("stop") output?

Ik probeer zo te achterhalen wat er niet goed gaat.. als bovenstaande "false" teruggeeft (wat het dus in principe doet), betekent dat dat je invoerstring niet helemaal correct is (dûh.. :p).
 
Mijn invoerzin "stop" gaat correct in die methode...
Ik vind het echt heel raar dat dit niet werkt ...
 
Dit is de volledige code van het projectje:

Code:
public class Calculator {

	static String ingave;
	static int getal;
	static int getal2;
	static String operator;
	static int X;
	static int m1;
	static int m2;
	static int m3;



    public void inleiding() {
		System.out.println("Welkom bij de Console Calculator");
		System.out.println("Een realisatie van Sven Sergeant (1 ICT 7)");
		System.out.println("Geef 'help' voor meer informatie omtrent het gebruik");
		System.out.println("----------------------------------------------------");
		invoer();
  	}

  	public void invoer() {
		System.out.print("calc>");
		ingave = Stream.readString();
		controleerinvoer();
	}

	public void controleerinvoer() {

		if(ingave.equals("help")){
			help();
		}else if (ingave.substring(0,4).equals("setm")){
			memory();
		}else if (ingave.substring(0,7).equals("display")){
			display();
		}else if (ingave.equals("stop")){
			stop();
		}else{
			berekening();
		}
	}

	public void help() {
			System.out.println("optie help");
			invoer();
	}

	public void stop() {
			System.out.println("optie stop");
			invoer();
	}

	public void memory() {//laden van geheugen


			if(Integer.parseInt(ingave.substring(5,6))==1){

			m1 = Integer.parseInt(ingave.substring(7,ingave.length()));
			}
			else if(Integer.parseInt(ingave.substring(5,6))==2){

			m2 = Integer.parseInt(ingave.substring(7,ingave.length()));
			}
			else if(Integer.parseInt(ingave.substring(5,6))==3){

			m3 = Integer.parseInt(ingave.substring(7,ingave.length()));
			}

			invoer();
	}

	public void display() {//ophalen van geheugen
				if(Integer.parseInt(ingave.substring(9,10))==1){
				System.out.println(m1);
				}
				else if(Integer.parseInt(ingave.substring(9,10))==2){
				System.out.println(m2);
				}
				if(Integer.parseInt(ingave.substring(9,10))==3){
				System.out.println(m3);
				}
				invoer();
	}

	public void berekening() {
			String arr[] = ingave.split(" ");
			 for(int i=0; i < arr.length-1; i=i+2) {

				if (i==0){
					getal = Integer.parseInt(arr[i]);
					operator = arr[i+1];
					getal2 = Integer.parseInt(arr[i+2]);
					bewerking();
				}else{
					getal = X;
					operator = arr[i+1];
					getal2 = Integer.parseInt(arr[i+2]);
					bewerking();
				}
			 }
			 System.out.println(X);
			 invoer();


	}
	public void bewerking() {
			if (operator.equals("+")){
					X = getal + getal2;
			}else if(operator.equals("-")){
					X = getal - getal2;
			}else if(operator.equals("*")){
					X = getal * getal2;
			}else if(operator.equals("/")){
					X = getal / getal2;
			}else if(operator.equals("%")){
					X = getal % getal2;
			}






	}



    public static void main (String[] args) {
      Calculator Object = new Calculator();
      Object.inleiding();
    }
}
 
Laatst bewerkt door een moderator:
Mijn invoerzin "stop" gaat correct in die methode...
Ik vind het echt heel raar dat dit niet werkt ...

Wat bedoel je daarmee? Dat je programma in de "}else if (ingave.equals("stop")){" komt? In dat geval zou je de println moeten zien.
Wat was de uitkomst van het outputten van "ingave.equals("stop")"?
 
Code:
public void controleerinvoer() {

		if(ingave.equals("help")){
			help();
		}else if (ingave.substring(0,4).equals("setm")){
			memory();
		}else if (ingave.substring(0,7).equals("display")){
			display();
		}else if (ingave.equals("stop")){
			stop();
		}else{
			berekening();
		}
	}

Waarom, maak je van de stop niet net zoals de vorigen een substring.equals.
Want als er nog maar 1 spatie teveel in zit, dan doet hij het dus niet.

Code:
public void controleerinvoer() {

		if(ingave.equals("help")){
			help();
		}else if (ingave.substring(0,4).equals("setm")){
			memory();
		}else if (ingave.substring(0,7).equals("display")){
			display();
		}else if (ingave.[COLOR="Red"]substring(0,4)[/COLOR].equals("stop")){
			stop();
		}else{
			berekening();
		}
	}
 
Spaties zou je ook met trim() af kunnen vangen.

Ik denk echter niet dat het probleem helemaal daar ligt.
Als de TS gewoon "help" invoert doet ie het wel, vult de TS dan "stop" in (ik neem aan hetzelfde als help, zonder spaties e.d!!), dan doet ie het niet.

Mijn eerste ingeving was / is dus dan ook: de invoer is niet correct.
 
Daarnaast is het ook nog hoofdletter gevoelig. Daar moet je ook goed om denken.

Das ook nog weer waar. Ik weet niet meer waarom, maar ik gebruik(te) altijd de functie compareTo() volgens mij..
edit: die roept onder water ook gewoon de equals() aan dus :p


Misschien sowieso gebruik maken van de functie "equalsIgnoreCase()"? :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan