RE: Je to písmeno nebo není ...
To bude tím, že se v Javě 5 přecházelo na jinou verzi normy Unicode konkrétně z verze 2.1 z roku 1998 (ta ale oproti verzi 2.0, s níž Java začala, přidala jenom znak eura) na verzi 4.0 z roku 2003. Šestka podle mne implementuje verzi 5.0 z roku 2006. Ta udělala zase pár kotrmelců - možná že ta změna interpretace háčku je jedním z nich. Každopádně se v šestce třídy pro normalizaci znaků (převod háčko-čárkovaných písmen na dvojici znak - diakritika a zpět) přestěhovaly z balíčku sun.text do java.text a navíc se jejich metody i trochu změnily včetně požadovaných parametrů. Pozor - v roce 2010 se chystá Unicode verze 6.0, takže můžeme v příští Javě čekat v práci se znaky zase nějaké drobné změny. Rozpovídal jsem se jenom proto, abyste věděli, že i věc, o níž si člověk myslí, že už je dávno usazená, může pořád překvapovat - viz problém s diakritikou. Preji krasny den Have a nice day ° Rudolf P E C I N O V S K Y Senior EDU Expert, ICZ a.s. Associate Professor Department of information technologies University of Economics, Prague Tel: +420 244 101 764 GSM: +420 603 330 090 ICQ:158 156 600 Jabber: pecinov...@jabbim.cz rud...@pecinovsky.cz rudolf.pecinov...@i.cz ° -Původní zpráva- Od: konference-boun...@java.cz [mailto:konference-boun...@java.cz] za uživatele Petr Franta Odesláno: pátek 11. prosince 2009 09:59 Komu: konference@java.cz Předmět: Je to písmeno nebo není ... Začaly mi padat testy a po bádání jsem dospěl k tomuto: Znak háček bez písmene - \u02C7 není v JDK 1.4 znak, ale v JDK 1.6 už znakem je! Asi těch znaků bude více, ale pro mne je to překvapením ... public class Test { /** * Test znaku. */ public static void main(String[] args) { char ch = '\u02C7'; System.out.println(Znak: + ch + + (int) ch + + Character.isLetterOrDigit(ch)); } } C:\Program Files\Java\jdk14\binjava -version java version 1.4.2_06 Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_06-b03) Java HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode) C:\Program Files\Java\jdk14\binjava Test Znak: ˇ 711 false c:\Program Files\Java\jdk16\binjava -version java version 1.6.0_14 Java(TM) SE Runtime Environment (build 1.6.0_14-b08) Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing) c:\Program Files\Java\jdk16\binjava Test Znak: ˇ 711 true __ Informace od ESET NOD32 Antivirus, verze databaze 4677 (20091210) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz __ Informace od ESET NOD32 Antivirus, verze databaze 4677 (20091210) __ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz
RE: jakou literaturu do zacatku?
rad bych se zacal vice venovat programovani v Java. Do ted (cca 8 let) jsem programoval spise pro sve potreby nebo par veci pro zakazniky, a to prevazne v shellu, php a perlu, vse na Linuxu. Rad bych pronikl vice do taju OOP a Javy. Prechodem na Javu prechazis nejenom na novou syntaxi, ale také na nove paradigma. Chces-li vytvaret programy, které budou opravdu objektove orientovane a nebudou to jenom nejake objektove se tvarici spatlaniny pouzivajici tridy, mel bys dostat pod kuzi trochu OOP mysleni. Naucit se syntaxi muzes za jedno odpoledne. Naucit se objektove premyslet, to vyzaduje myslenkovy kotrmelec, který beznym programoatorum trva vice nez rok. (Uvadi se, ze preskoloeni klasickeho programatora na objektove orientovaneho trva 12-18 mesicu - cim zkusenejsi, tim dele). Jedinou ceskou knihou, která te uci objektove programovat, je Myslime objektove v jazyku Java a na ni volne navazujici (byt jinym nakladatelem vydana) Navrhove vzory Z anglickych bych ti mohl doporucit Head First Object-Oriented Analysis Design a Head First Design Patterns. Knihu Head First Java bych nedoporucoval, protože se soustredi spise na syntaxi a objektve orientovanem mysleni ti moc nepovi.
RE: Eclipse a NetBeans
mám dotaz jestli existuje nějaký plugin, který dokáže exportovat Netbeans projekty do Eclipse project formátu. Ja si myslim, ze to vubedc není potrewba, protože to, co se zbytkem fimry sdilis, jsou zdrojove kody a ne format projektu. U nas ve firme pracuji programatori ve ctyrech ruznych IDE - každý ve svem oblibenem, a nikde s tim problemy nejsou. Ja sam prepinam podle momentali potreby tech ci onech funkci mezi BlueJ - NetBeans - Eclipse a nemam s tim zadny problem.
RE: hashset contains wtf
Děkuji za objasnění, už rozumím (naprosto dokonale). Jednoznačně je to chyba v javadoc. Možná se moje odpověď nebude někomu líbit, ale podle mne v javadoc chyba není. Toto chování vyplývá z vlastností hešových tabulek a měla by to proto vysvětlit učebnice (nebo lektor) jako obecnou vlastnost všech objektů využívajících hešových tabulek. Jestli k vám takováto informace ještě nepronikla, spílejte svým učitelům a autorům učebnic, z nichž jste se Javu učili. Rozlišujte javadoc a učebnici. Kdyby se měly dávat do javadoc i takovéto věci, tak tam za chvíli někdo bude chtít vysvětlit, jak funguje interface nebo jiný jazykový konstrukt. Pro javadoc by mělo stačit prohlášení, že daný kontejner je definován pomocí hešových tabulek, a to tam je. Tím nechci říst, že by javadoc nějakou drobnou zmínku na toto téma nesnesl, ale chápu, proč se Sunům nechce do něj dávat věci, které mají být primárně vysvětleny jinde. Já bych jim spíš vyčítal, že tuto informaci nedali do tutoriálu (leda bych ji tam ve své slepotě nenašel) - tam podle mne patří. Já bych tam zařadil kapitolku o hešových tabulkách, na kterou by se pak odvolávaly všechny kapitoly pojednávajících o kontejnerech, které jsou na hešových tabulkách založeny.
RE: Udalosti klavesnice
Tento kód ma vypísať kód klávesy, ktorú stlačím. Keď stalačím hociaku klavesu, tak mi vypise 0. Prvy krat pracujem s udalosťami klavesnice. Takže tam bude nejaká chyba,ktorú neviem najisť. Zkus si upravit kód následovně (pak to začne chodit): public class Udalosti extends java.applet.Applet implements java.awt.event.KeyListener { //definujeme premenne int kp, kr, kt; public void init() { addKeyListener(this); } //teraz to vypiseme public void paint (Graphics auto) { auto.drawString(KP= + kp + , KR= + kr + , KT= + kt , 10,10); } //zachyti stalacenie klavesy public void keyPressed(java.awt.event.KeyEvent ke) { //kod klavesy kp = ke.getKeyCode(); repaint(); } //zachyti uvolnenie klavesy public void keyReleased(java.awt.event.KeyEvent ke) { kr = ke.getKeyCode(); repaint(); } public void keyTyped(java.awt.event.KeyEvent ke) { kt = ke.getKeyChar(); repaint(); } } -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.409 / Virus Database: 268.13.22/512 - Release Date: 01.11.06 st
RE: Literatura
Zrovna se Javu ucim a Thinking in Java od Eckela mne prijde pro zacatecnika, ktery se chce Javu naucit, jako prvni knizka nejlepsi. Záleží na tom, o jakého začátečníka se jedná. Pro člověka, který se potřebuje naučit syntaxi Javy, je určitě dobrá (ostatně já jsem se z ní také učil). Pro člověka, který ještě neumí objektově programovat ale znám lepší. Její nevýhodou pro opravdové začátečníky je, že se omezuje opravdu jen na syntaxi a vůbec se nesnaží čtenáři ukázat, jak má v Javě přemýšlet, takže čtenář po jejím přečtení sice programuje v Javě, ale dál v ní patlá své strukturované programy. Kniha totiž ani vzdáleně nenaznačuje, že pracovat s objekty ještě neznamená objektově programovat. Vynechám-li tu svoji, tak knihy, které se snaží naučit opravdu objektově programovat, jsem zatím objevil jen tři: Head First Design Patterns Lepší z nich. Neomezuje se pouze na výklad návrhových vzorů, ale opravdu se snaží čtenáře naučit objektově přemýšlet. Mrzí mne na ní, že je místy trochu plytká a řídká a že je postavena pouze na AHA-příkladech, ale znám řadu lidí, kterým to nevadí. Kniha ale předpokládá základní znalost syntaxe Javy Object First with Java Ta je určena pro naprosté začátečníky a autor se snaží čtenáře naučit programovat opravdu objektově, nicméně to dělá jen polovičatě. Např. rozhrnaí vysvětluje až ke konci knihy a navíc je primárně zavádí jako náhražku násobné dědičnosti. Big Java To je takový hybrid mezi klasicky pojatou učebnicí probírající syntaxi a knihovny a učebnicí snažící se naučit objektově programovat. Autor již vysvětluje i mnohé ze zásad OOP, ale těžiště výkladu je přece jenom blíže té klasíce. O logickych operatorech a | se nezminuje, to me taky prekvapilo, ale inicializace u anonymnich trid tam popsana je. Inicializaci anonymních tříd vysvětluje až ve třetím vydání (já jsem se učil z druhého), k lepšímu vysvětlení serializace se však nepropracoval ani tam. Čtvrté jsem prozatím v ruce neměl. A pak mne jeste zaujala Just Java. Ta mi, bohužel, zatím rukama neprošla -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.405 / Virus Database: 268.10.9/417 - Release Date: 11.08.06 pá
RE: Literatura
Pro lovka, který che znát vci trochu do hloubky a nemusí se uit základy porgramování je podle mne jednou znejlepích dvojice knih Core Java: VolI - Fundamentals - ISBN 0-13-148202-5 Vol II - Advanced Features - ISBN 0-13-111826-9 -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.394 / Virus Database: 268.10.4/402 - Release Date: 27.07.06 èt
RE: Add to array objects
... nevim jak tam pridat komponentu, kdyz mam toto jDesktopPane = new JDesktopPane[jDesktopPane.length+1]; tak se mi to proste vymaze, poradte mi jak to resite? To se nevymaže - prostě se vytvoří nový objekt a odkaz v proměnné jDesktopPane se nasměruje na něj. Pokud na ten původní už nikdo neukazuje, stane se kandidátem na odstranění. Potřebuješ-li přidávat složky do vektoru (=jednorozměrného pole) po jedné, použij např. ArrayList. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.385 / Virus Database: 268.4.1/310 - Release Date: 12.04.06 st
RE: special Window keys
Souhlasím s tím, že je to prasárna. Nicméně je-li to někdy doopravdy potřeba, lze to udělat tak, že si dotyčný programátor nadefinuje vlastní ovladač klávesnice a ten vnutí systému místo toho původního. Ovladač nemusí být kompletní - stačí aby stisky kritických kláves konvertoval na nějaké jiné a zbytek práce pak nechal na původním ovladači. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 268.2.1/278 - Release Date: 09.03.06 t
RE: Numericke operace na typem Double
At se to zda absurdi kupodivu v naprosto bezne praci potrebuju presnost. Kdyz mam delat testy musim mit jistotu ze 39.9 / 10 = 39.9 *0.1 = 39.9/100. Kdyz mi kazda tato operace vrati jiny vysledek pak je neco sakra spatne. Takze typ double pro mne vlastne efektvine skocil. Sakra špatně je program, který testuje dva double na rovnost. Všechny slušné kurzy programování jasné varují, že přímé porovnání dvou hodnot double je zakázaná operace. Lze-li předem odhadnout řádovou velikost provonávaných hodnot, musí se dvě hodnoty d1 a d2 typu double porovnávat buď abs(d2 - d1) eps kde eps je nějaké předem zvolené číslo, které je výrazně menžší než požadovaná přensot (už to tu někdo psal). Není-li možno předem odhadnout řádovou velikost (tj. jestli to budou tisíce nebo tisíciny), je to obtížnější - pak se musí porovnávat např. abs(1 - d1/d2) eps Při běžné práci opravdu není potřeba větší přesnost, než oněch doublem zaručených 15 cifer. S takovou přesností se totiž v běžné praxi nic neměří, takže není důvod na ní trvat. Taková zaručená přesnost je většinou potřeba pouze ve finančních výpočtech, kde potřebujete počítat miliardami a bilióny s přesností na halíře. Druhou oblastí jsou pak naumerická řešení všelijakých rozsáhlých rovnic popisujících tuhé systémy, protože tam je občas potřeba odečíst dvě skoro stejná čísla a nemám-li dostatečný počet platných cifer, jsem v ... Opravdu existují úlohy, kde je třeba místo double používat např. BigDecimal, ale není jich tak moc. I při výpočtech s pomocí BigDecimal vznikají zaokrouhlovací chyby a hlavně jsou tyto výpočty mnohem, ale opravdu mnohem pomalejší. Ne vždy jsme přitom za ono částečné zvýšení přesnosti ochotni touto pomalostí platit. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 268.0.0/267 - Release Date: 22.02.06 st
RE: Numericke operace na typem Double
Stojim za tim, ze se chyba na trinactem miste v 99% pripadu ignorovat neda. Napr. pri formatovani pomoci sprintf jak je uvedeno vyse. Opak je pravdou Konkretne cislo 39.9 / 10 se podle JAVA rovna 3.988 takze ve vyslednem formatovani se zobrazi 3.99 (teda pokdu zaokrouhluje, to jsem nezkousel jinak by to vyslo 3.98) Kdyz ale provedete 39.9 * 0.1 tak podle JAVA dostanete 4.007 takze ve vyslednem formatovani ziskate 4.00 Jak kde - mně vychází: 39.9 * 0.1 = 3.99 39.9 + 0.1 = 40.0 V programu: public static void test() { System.out.println(\f); double a = 39.9; double b = 0.1; System.out.println( a + * + b + = + (a*b) ); System.out.println( a + + + b + = + (a+b) ); } Díval jste se opravdu dobře na to, co zadáváte? Hle ona chyba se z trinacte pozice prenesla hned na treti. Jak jsem byl ukázal, chyba naopak nebyla vůbec žádná. Nicméně i kdyby byla taková, jak jste psal, tak se v žádnom případě nepřesunula na třetí pozici, ale byla na jedenácté, protože ten výsledek byl urrčitě výsledek nějakého sčítání a ne násobení. Leda byste měl nějaký nabouraný koprocesor. Je vysoka pravdepodobnost ze se vyskytnou pripady kdy se takova chyba prenese dokonce na pozici druhou. Když program napíšu blbě, tak opravdu ano. Btw. nevim ktere jazyky pocitate za vetsinu. Delphi a C# temito neduhy netrpi. Trpí jimi všechny programovací jazyky, protože všechny jazyky používají v počítači stejný koprocesor, který tyhle výpočty provádí. Jediný rozdíl je v tom, jakou používáte proceduru pro tisk - pokud používáte v jednom jazyku zaokrouhlovací proceduru a v druhém ne, nemůžete jejich výsledky porovnávat. Začněte v Dephi tisknout s přesností na 15 desetinných míst a budete dostávat stejné výsledky jako u prinln v Javě. Budete-li naopak používat formátovaný výstup v Javě, vůbec takovéte drobné odchylky nezaznamenáte. Používejte printf a porovnávejte hodnoty korektně a máte po starostech. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 268.0.0/267 - Release Date: 22.02.06 st
RE: Prevod kodovani znaku
Uvedená metoda má jednu nevýhodu: neumí pevádt pehlasovaná písmena, která se pevádjí na dvojice znak - nap. Göthe - Goethe apod. Kdy pevedete Göthe na Gothe, bode to vypadat dost blb. Na javacentrum.sk vo faq je jedna taka metoda, ale mne momentalne javacentrum nefici. Bolo to myslim toto: private static final String tab00c0= "AAAC"+ "DNO\u00d7\u00d8YI\u00df"+ "aaac"+ "\u00f0no\u00f7\u00f8y\u00fey"+ "AaAaAaCcCcCcCcDd"+ "DdEeEdEdEdEdGgGg"+ "GgGgHhHhIiIiIiIi"+ "IiJjJjKkkLlLlLlL"+ "lLlNnNnNnnNnOoOo"+ "OoOoRrRrRrSsSsSs"+ "SsTtTtTtUuUuUuUu"+ "UuUuWwYyYZzZzZzF"; public static String internationalToEnglish( String source ){ char[] vysl = new char[source.length()]; char one ; for( int i = 0 ; isource.length();i++ ){ (i); if( one='\u00c0' one ='\u017f' ) (int)one - '\u00c0' ); vysl[i]=one; } return new String(vysl); } On 2/10/06, Lukas Fiala [EMAIL PROTECTED] wrote: Zdravim,potreboval nejakou sikovnou tridu na "odhackovani" narodnich znaku zruznych znakovych sad do cisteho ascii. Tedy odsraneni ruznych hacku, carek, sprezek, ocasku a podobnych veci. Mel by jste nekdo tip? Lukas Fiala --No virus found in this incoming message.Checked by AVG Free Edition.Version: 7.1.375 / Virus Database: 267.15.4/255 - Release Date: 09.02.06 èt -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 267.15.4/255 - Release Date: 09.02.06 èt
RE: Prevod kodovani znaku
Uvedená metoda má jednu nevýhodu: neumí převádět přehlasovaná písmena, která se převádějí na dvojice znaků - např. Göthe - Goethe apod. Když převedete Göthe na Gothe, bode to vypadat dost blbě. No ze to vypada blbe. Ale prece ceske slovo Kočka taky nechcete prevadet na Koczka, to by pak byl prevod na ascii podle toho jak to pismeno zni v mluvenej reci. Hovoříme každý o něčem jiném. Já hovořím o tom, jak se to má přivádět správně a vy dáváte protipříklad, že se to nemá převádět blbě. Pravidla pro převod do podoby bez diakritiky nikde nehovoří o tom, že by se kočka měla převádět na koczku - o něčem takovém opravdu nevím. Vy snad ano? Ale tato pravidla jasně hovoří o tom, že přehlasované ä, ö a ü se převádějí na ae (např. maedchen), ö na oe (např. Goethe) a ü na ue (např. Muenchen - Mnichov - viz www.muenchen.de). Když budete místo Goethe psát Gothe apod., tak se jenom ztrapníte. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 267.15.4/255 - Release Date: 09.02.06 čt
RE: generic type array
Abys mohl vracet požadovaný typ, musel bys zadat do parametru pole s příslušným typem položek. Pole hodnot parametrizovaného typu však nelze vytvořit, taže se budeš muset s tou varovnou hláškou smířit, anebo si pořídit verzi Javy, jejíž překladač již bude akceptovat zákaz vydávání varování typu unchecked. Chápu správně, že tohle: return list.toArray(new LinkedHashMap[list.size()]); Nejde v Jave 1.5 doplnit o generický typ LinkedHashMapString,String, tak aby to negenerovalo 'unchecked' chybu? -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 267.14.23/242 - Release Date: 26.01.06 čt
RE: Konstruktory
Druhou moností oproti té, kterou navrhoval Láda, je pouít místo konstruktoru tovární metodu. V knize Myslíme objektove v jazyku Java 5.0 jsem to trochu rozebíral - pust si to nekde v knihkupectví pres palec. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.362 / Virus Database: 267.13.4/175 - Release Date: 18.11.05 pá
RE: Chyba v prekladu...
Odpovídám pozdě a ne na dotaz, ale přesto: Naprostým začátečníkům doporučuji používat nějaké jednoduché vývojové prostředí, které je odstíní od takových specialit, jako je třeba nastavování classpath. Připadá mi nemoudré, vysvětlovat zákonitosti tohoto nastavování někomu, kdo má plně kecky toho, aby se vůbec naučil základy jazyka. Myslím si, že na podobné věci je dost času poté, až dotyčný tyto základy zvládne a pochopí význam nastavování classpath v souvislostech. Jak jsem již mnohokrát naznačil, nevíc se mi na většině učebnic nelíbí, že začátečníky neučí programovat, ale jenom je seznámí se syntaxí jazyka v bláhové naději, že umění programovat přijde jako vedlejší efekt. Ale to je už jiná pohádka. -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.323 / Virus Database: 267.9.0/43 - Release Date: 16.07.05 so