Toon posts:

kleine JAVA vraag (ivm. oefening)

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik was even wat aan het uitproberen voor mijn examen van volgende week donderdag en een kleine calculator maken (om wat met strings te spelen). Het werkt dus zo:
java oef124 + 1 1 -> output: 2
java oef124 * 7 3 -> output: 21
Heel simpel, was om 2 minuutjes gemaakt.. maar er is een probleempje, en ik snap niet goed waarom. Hier is de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class oef124 {
    public static void main (String[] args) {
        int getal1 = 0;
        int getal2 = 0;
        
        getal1 = zetOm(args[1]);
        getal2 = zetOm(args[2]);

        if (args[0].equals("+"))
            System.out.print("Resultaat: " + (getal1 + getal2));
        if (args[0].equals("-"))
            System.out.print("Resultaat: " + (getal1 - getal2));
        if (args[0].equals("*"))
            System.out.print("Resultaat: " + (getal1 * getal2));
        if (args[0].equals("/"))
            System.out.print("Resultaat: " + (getal1 / getal2));
    }
    
    static int zetOm(String string) {
        int getal = 0;
        
        for (int i = string.length() - 1; i >= 0; i--)
            getal = (string.charAt(string.length()-1-i) - 48 ) * (int) (Math.pow(10,i)) + getal;
        
        return getal;
        }
}

De + / en - werken, maar de * niet? Bij java oef124 * 7 3 geeft hij dus geen output, hoewel bij java oef124 + 7 3 en java oef124 - 7 3 en java oef124 / 7 3 wel? Weet iemand waarom?

Verwijderd

* is een jokerteken, kan dus alles zijn.

Misschien dat de shell (DOS?) of java.exe daar een beetje gek van gaan doen...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik denk dat het wellicht wel werkt als je er " ... " omheen zet. Het werkt natuurlijk sowieso als je in je applicatie om input vraagt.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op zaterdag 01 december 2001 18:08 schreef Cheatah het volgende:
* is een jokerteken, kan dus alles zijn.

Misschien dat de shell (DOS?) of java.exe daar een beetje gek van gaan doen...
Hmmm... Dan zal het daar wel aan liggen ja. Ach, de opzet is gelukt :) Zat ook even tussen het verschil:
code:
1
if (string1 == string2) ...

en
code:
1
if (string1.equals(string2)) ..

Is het juist als ik zeg dat de eerste code naar de REFERENTIE kijkt, maar de tweede code naar de WAARDE?

Bedankt voor de hulp!

Verwijderd

Topicstarter
Op zaterdag 01 december 2001 18:10 schreef mbravenboer het volgende:
Ik denk dat het wellicht wel werkt als je er " ... " omheen zet. Het werkt natuurlijk sowieso als je in je applicatie om input vraagt.
Yup.. dat werkte inderdaad perfect. 'k Werk in dos (java.exe javac.exe) trouwens.

Verwijderd

Op zaterdag 01 december 2001 18:12 schreef DiEana het volgende:

Hmmm... Dan zal het daar wel aan liggen ja. Ach, de opzet is gelukt :) Zat ook even tussen het verschil:
code:
1
if (string1 == string2) ...

en
code:
1
if (string1.equals(string2)) ..

Is het juist als ik zeg dat de eerste code naar de REFERENTIE kijkt, maar de tweede code naar de WAARDE?
het eerste voorbeeld kijkt niet naar de waarde, maar naar het object. Dus of het allebei strings zijn (een String is een object).

het tweede voorbeeld is meer in de buurt, al is dat ook niet helemaal juist. Het kijkt niet of de objects dezelfde referentie hebben (het zijn allebei Strings) maar naar de inhoud.

Verwijderd

Topicstarter
Op zaterdag 01 december 2001 18:17 schreef Cheatah het volgende:

[..]

het eerste voorbeeld kijkt niet naar de waarde, maar naar het object. Dus of het allebei strings zijn (een String is een object).

het tweede voorbeeld is meer in de buurt, al is dat ook niet helemaal juist. Het kijkt niet of de objects dezelfde referentie hebben (het zijn allebei Strings) maar naar de inhoud.
Ah, oke.. Maar dan heb ik toch nog een bijvraag ivm. het eerste: Waarom werkte
code:
1
2
if (args[0] == "+")
    System.out.print("Resultaat: " + (getal1 + getal2));

dan niet? args[0] is een String, want dat heb ik bovenaan gezegd (public static void main (--> String[] args <--). En "+" is ook een string, want het staat tussen dubbele quotes? Toch kreeg ik geen output daar?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DiEana: Is het juist als ik zeg dat de eerste code naar de WAARDE kijkt, maar de tweede code naar de REFERENTIE ?
== is een standaard Java operator. Deze operator levert true op als in een expressie (o1 == o2) de variabelen o1 en o2 naar hetzelfde object wijzen.

.equals is gewoon een methode die elk klasse heeft. .equals zou normaal gesproken de inhoud van de objecten moeten vergelijken en kan dus ook true op leveren als je twee verschillende objecten vergelijkt (die met == dus false opleveren). Je moet de equals methode zelf implementeren in je klassen die je schrijft. Doe je dat niet, dan is het in feite een == methode.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op zaterdag 01 december 2001 18:22 schreef mbravenboer het volgende:

[..]

== is een standaard Java operator. Deze operator levert true op als in een expressie (o1 == o2) de variabelen o1 en o2 naar hetzelfde object wijzen.
Idd, dat bedoelde ik met "referentie".. ze verwijzen naar hetzelfde, ze hebben dezelfde referentie. Kwam even niet goed uit mijn woorden. "Referentie naar hetzelfde object", moest het dus zijn! Bedankt voor dat recht te zetten ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Overigens moet dit voorbeeld van == en .equals een beetje uitkijken met Strings... String worden at-compile-time namelijk ge-intern-alized zodat het hetzelfde object wordt (indien mogelijk). At-runtime kan je dat zelf eventueel doen met String.intern() .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Moet je die methode zetOm trouwens implementeren voor een opdracht of heb je nog niet van Integer.parseInt(String) gehoord? ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op zaterdag 01 december 2001 18:30 schreef mbravenboer het volgende:
Moet je die methode zetOm trouwens implementeren voor een opdracht of heb je nog niet van Integer.parseInt(String) gehoord? ;) .
Hebben we niet gezien in de cursus, dus moet inderdaad :( Zo zijn er nog veel dingen die we zelf opnieuw moeten implementeren... beetje zinloos idd :), maar kan er ook niets aan doen |:(

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op zaterdag 01 december 2001 18:28 schreef mbravenboer het volgende:
Overigens moet dit voorbeeld van == en .equals een beetje uitkijken met Strings... String worden at-compile-time namelijk ge-intern-alized zodat het hetzelfde object wordt (indien mogelijk). At-runtime kan je dat zelf eventueel doen met String.intern() .
voorbeeld
code:
1
2
String een = "blaat";
String twee = "blaat";

Hier wijzen ze naar hetzelfde object en een == twee geeft dan true.
code:
1
2
String een = new String("blaat");
String twee = new String("blaat");

Hier wijzen ze niet naar hetzelfde object en een == twee geeft dan false. ;)
Pagina: 1