[java] c++ STL functionaliteit in java

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Misschien brul ik in de verkeerde kerk maar ik probeer het toch.

Ik heb gemerkt dat ik bepaalde equivalente functies mis van C++ in Java zoals een simpele cin.
En als ik het zelf implementeer dan ben ik best een tijdje bezig.

Is er niet een library voor java die deze gat op kan vullen?

/me rent weer weg

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

System.In? De BCL of hoe dat ook mag heten bij Java is best uitgebreid hoor.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • GBCHEATER
  • Registratie: Juni 2003
  • Laatst online: 17-09-2024
Nadat ik "cin+java equivelant" ingetoetst had in google, kwam ik bij de eerste hit uit op System.In.Read, is dit wat jij bedoeld?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
AtleX schreef op woensdag 11 augustus 2010 @ 14:09:
System.In? De BCL of hoe dat ook mag heten bij Java is best uitgebreid hoor.
Naar mijn idee is dat juist het probleem soms: het is te uitgebreid en ook best omslachtig(naar mijn mening). :P

Om maar als voorbeeld te nemen: het lezen van ints van STDIN:
eerst moet je het inlezen als string om daarna met Integer.parseInt(); om het te converteren.
Maar het zou aan mij kunnen liggen maar ik vind dit niet handig ;)

[ Voor 15% gewijzigd door Verwijderd op 11-08-2010 14:22 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Nee hoor, je kunt ook de Scanner gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

overigens valt iostream helemaal niet onder de STL

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 17:23

Sebazzz

3dp

Verwijderd schreef op woensdag 11 augustus 2010 @ 14:18:
[...]

Om maar als voorbeeld te nemen: het lezen van ints van STDIN:
eerst moet je het inlezen als string om daarna met Integer.parseInt(); om het te converteren.
Maar het zou aan mij kunnen liggen maar ik vind dit niet handig ;)
C++:
1
2
int blaat;
cin >> blaat;

Dit is een slecht programmeervoorbeeld.

Je moet het als string interpreteren en daarna kijken of het naar een integer kan converteren.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op woensdag 11 augustus 2010 @ 14:39:
overigens valt iostream helemaal niet onder de STL
Oeps.. :X Ik bedoel gewoon Standard library. :)
Sebazzz schreef op woensdag 11 augustus 2010 @ 14:51:
[...]


C++:
1
2
int blaat;
cin >> blaat;

Dit is een slecht programmeervoorbeeld.

Je moet het als string interpreteren en daarna kijken of het naar een integer kan converteren.
Dat weet ik maar ik zoek eigenlijk een library voor java die equivalent functionaliteit heeft van de c++ std lib. :)

[ Voor 48% gewijzigd door Verwijderd op 11-08-2010 14:58 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sebazzz schreef op woensdag 11 augustus 2010 @ 14:51:
[...]


C++:
1
2
int blaat;
cin >> blaat;

Dit is een slecht programmeervoorbeeld.

Je moet het als string interpreteren en daarna kijken of het naar een integer kan converteren.
Waarom in hemelsnaam :?

[ Voor 87% gewijzigd door .oisyn op 11-08-2010 15:00 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 17:23

Sebazzz

3dp

Nouja, Java mist sowieso operator overloading, dus dat je een library vind die dat biedt lijkt me sterk. Wat je hoogstens kan doen is een preprocessor schrijven die je << en >> omzet in de juiste language constructs.

Anders doe je gewoon zoiets, als je écht wilt zoals jij het wilt:
Java:
1
2
3
4
5
6
7
8
9
10
11
public static int readInteger() {
     // read from input stream
     String input = ...;

     // convert
     try {
         return Integer.Parse(input);
     } catch ( Exception ex ) {
         return BAD_VALUE; //waarbij BAD_VALUE bijvoorbeeld het minimale hoeveelheid van een 32-bit integer is
     }
}
http://www.fredosaurus.com/notes-cpp/io/cinloop.html
Je kan ook kijken of cin.fail() iets teruggeeft maar zomaar integers van cin accepteren is bad practice.

[ Voor 62% gewijzigd door Sebazzz op 11-08-2010 15:05 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sebazzz schreef op woensdag 11 augustus 2010 @ 15:01:
http://www.fredosaurus.com/notes-cpp/io/cinloop.html
Je kan ook kijken of cin.fail() iets teruggeeft maar zomaar integers van cin accepteren is bad practice.
Maw er klopte weinig van je eerdere statement, en wat je eigenlijk bedoelde te zeggen was dat je op errors moest checken? :)

Sterker nog, als je exceptions aanzet op std::cin dan hoef je niet eens zelf te "checken", maar wordt er gewoon een exception gegooid die je af kunt vangen. In welk geval er dus compleet niets mis is met het stukje "slechte" voorbeeldcode wat je eerder gaf.

[ Voor 24% gewijzigd door .oisyn op 11-08-2010 15:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 17:23

Sebazzz

3dp

En in dat geval verschilt de Java methode dus nog niet eens zo erg.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Anyway
C++:
1
2
3
4
int blaat
cin >> blaat;
if (!cin)
    cout << "Geen geldig getal, lapswans!" << endl;

lijkt me een prima programmeervoorbeeld. Extra credits voor het uitschelden van de gebruiker.

[ Voor 15% gewijzigd door .oisyn op 11-08-2010 16:37 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

* Janoz wijst Sebazz nog wel even subtiel op Janoz in "[java] c++ STL functionaliteit in java"

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 17:23

Sebazzz

3dp

Dat heb ik niet gemist hoor ;)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

.oisyn schreef op woensdag 11 augustus 2010 @ 15:22:
Anyway
C++:
1
2
3
4
int blaat
cin >> blaat;
if (!cin)
    cout << "Geen geldig getal, lapswans!" << endl;

lijkt me een prima programmeervoorbeeld. Extra credits voor het uitschelden van de gebruiker.
Als je er std:: voorzet ;)

Maar idd, gewoon exceptions aanzetten, dat doe ik ook altijd.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kan iemand mijn vraag beantwoorden? De functie cin was maar slechts een voorbeeld... :/

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mja, maar voor vrij veel van dat soort C++ classes zijn er equivalenten in Java. Bovendien, als ik zoek naar "STL Java" krijg ik ook vrij veel hits. Dus wat is dan nog precies je vraag?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op woensdag 11 augustus 2010 @ 21:02:
Mja, maar voor vrij veel van dat soort C++ classes zijn er equivalenten in Java. Bovendien, als ik zoek naar "STL Java" krijg ik ook vrij veel hits. Dus wat is dan nog precies je vraag?
Verwijderd schreef op woensdag 11 augustus 2010 @ 14:07:
Hoi,

Misschien brul ik in de verkeerde kerk maar ik probeer het toch.

Ik heb gemerkt dat ik bepaalde equivalente functies mis van C++ in Java zoals een simpele cin.
En als ik het zelf implementeer dan ben ik best een tijdje bezig.

Is er niet een library voor java die deze gat op kan vullen?

/me rent weer weg

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zoals ik al zei, [google=java stl]: http://jga.sourceforge.net/. Had je zelf ook wel kunnen doen...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah, dit zocht ik! Ik wist het even niet meer. :X Thnx!

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Ik weet niet wat de TS nu precies wil... de standaard Java Reader (en in mindere mate Writer) interface is inderdaad behoorlijk spartaans, maar java.util.Scanner heeft een stuk meer functionaliteit, waarmee je op een vergelijkbare manier kunt parsen als met std::istream's in C++. Niet op exact dezelfde manier, nee, maar is dat een probleem?

Verder bevat java.util ook collection classes. Wederom niet precies dezelfde (en naar mijn mening ook minder goed uitgewerkte) data structuren, maar je kunt er de meeste praktische problemen wel mee oplossen.

Als je precies de standard library van C++ wil hebben, moet je natuurlijk in C++ gaan programmeren. Mijn tegenvraag is dus: wat wil je precies?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou ja wat Java vooral mist (maar wellicht loop ik achter, mijn ervaring is vooral met 1.4) is een <algorithm> of linq achtige library. Maar als ik zo snel door die JGA library heen browse dan komt dat wel aardig in de buurt.

[ Voor 63% gewijzigd door .oisyn op 11-08-2010 21:26 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Dat klopt wel ja. Maar het is natuurlijk de kunst van elke programmeertaal om de middelen die je wél hebt ten volle te benutten. En als de TS dan specifiek std::cin als voorbeeld noemt, dan denk ik: dáár kun je prima java.util.Scanner voor gebruiken. Wellicht dat er voor andere praktische problemen dan ook prima Java-specifieke oplossingen bestaan.

Voor de rest kunnen third party libraries wel een oplossing zijn.

(Sowieso mist de Java library ook nog wel het één en ander omdat klassen vooral gericht zijn op één specifiek doel. Zo implementeert een java.util.TreeSet bijvoorbeeld wel netjes een OrderedSet maar mist de lower_bound() en upper_bound() methoden die een std::set wel heeft, en die voor bepaalde algoritmen behoorlijk handig zijn. Terwijl dat soort methoden eigenlijk triviaal te implementeren zijn.)

[ Voor 4% gewijzigd door Soultaker op 11-08-2010 21:44 ]


  • terje7601
  • Registratie: September 2009
  • Laatst online: 08-02-2024
Soultaker schreef op woensdag 11 augustus 2010 @ 21:43:
(Sowieso mist de Java library ook nog wel het één en ander omdat klassen vooral gericht zijn op één specifiek doel. Zo implementeert een java.util.TreeSet bijvoorbeeld wel netjes een OrderedSet maar mist de lower_bound() en upper_bound() methoden die een std::set wel heeft, en die voor bepaalde algoritmen behoorlijk handig zijn. Terwijl dat soort methoden eigenlijk triviaal te implementeren zijn.)
Ter info: java.util.TreeSet implementeert NavigableSet, een subinterface van SortedSet. En in die interface heb je methoden als "ceiling", "floor", "higher", "lower" etc.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Jammer alleen dat die het element zelf teruggeven, en geen iterator. Je zit dus vast aan de subSet() methode.

.edit: oh wacht, die returnt dan iig een view van de subset, niet een kopie ofzo. Dat scheelt weer, kun je er iig alsnog vrij goedkoop overheen itereren.

[ Voor 41% gewijzigd door .oisyn op 12-08-2010 17:55 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1