- iPhone topik
- Újabb Samsungok telepíthetik a Galaxy AI-t
- Mindent megtudtunk az új Nokia 3210-ről
- Képeken az egyik kameráját elvesztő Sony Xperia 10 VI
- Bemutatkozott a Moto G32 4G
- Nothing Phone 2a - semmi nem drága
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Poco X6 Pro - ötös alá
- Véroxigénszintet is mér a Honor Band 5
- Vodafone-ra áttért Digi Mobilosok
Hirdetés
-
A franciáknak elege van abból, hogy minden gyerek mobilozik
it Vissza akarják szorítani a gyerekek és tinédzserek közösségi média- és okostelefon-használatát.
-
Mozgásban az F1 24
gp A Forma 1 versenyek rajongói hamarosan végre belevethetik magukat az idei epizódba.
-
Az Apple megszerezné a klubvilágbajnokság közvetítési jogait
ph A vállalat ezért irgalmatlan pénzt fizetne a FIFA-nak, és ezzel rajzolná át az online streaming platformok háborújában a frontvonalakat.
Új hozzászólás Aktív témák
-
Karma
félisten
válasz Superhun #3100 üzenetére
Ha külső, komolyabb librarykről van szó, vagy nagyobb projektekről, megérheti a Mavent is bevonni a játékba. Mindent és még annál is többet megcsinál.
Bár nem hiszek abban, hogy van egy kritikus minimális méret, ami alatt nem éri meg rendesen szervezett projektet gyártani
“All nothings are not equal.”
-
bucsupeti
senior tag
Köszönöm az infókat!
@Karma: mi a Maven pontosan? Mire használható?
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
Karma
félisten
válasz bucsupeti #3102 üzenetére
Kikapcsolódás (mármint sok órát bele lehet ölni), XML fetisisztáknak örömforrás, de mindenek felett egy Java build rendszer.
Amiben a legkisebb projekteket is tudja segíteni: 1) sablonokból (ún. archetípus) többszázféle projektet létre lehet hozni egyszerűen; 2) ha bármiféle libraryre szükséged van(*), csak megadod függőségként, a Maven levadássza, felhasználja a fordításnál, sőt akár egybe is csomagolja neked a programoddal; 3) ad egy egységes, mindenre kiterjedő keretet a fordításnak (előfeldolgozás -> fordítás -> tesztelés -> csomagolás -> archiválás), ami szabadon konfigurálható, és 4) tovább bővíthető szinte bármilyen célra(**).
Hatalmas változást hozott a Java fejlesztői munkáimban, hogy circa egy éve beleástam magam. Mindenképp ajánlom, hogy próbáld ki És ha van valami konkrét kérdés, címezd ide, elég lelkes vagyok e kapcsán
Egyébként a fentebbiek hatalmas projekteknél hatványozottan jól jönnek. Nincs is jobb, mint kézzel másolgatni többszáz dependenciát, és többtíz Ant projektet sokezer soros kézi szkripttel fordítani...
(*) A nyilvánosan elérhető csomagok között legegyszerűbben a search.maven.org-on tudsz keresni. Ez az ún. Maven Centralt indexeli - ami kvázi az egész Java világ.
(**) Rengeteg plugin elérhető el, legyen szó kódanalízisről, dokumentációgenerálásról, XML validálásról, LESS->CSS konverzióról, source controlról, tényleg bármiről. Sőt, még Antot is képes beágyazva futtatni, így még tovább bővülnek a lehetőségek.
[ Szerkesztve ]
“All nothings are not equal.”
-
bucsupeti
senior tag
Nem biztos hogy teljesen jól fogalmaztam meg a dolgokat.
Szóval azt szeretném, hogy van egy "csomagom", ami tartalmaz egy osztálydefiníciót (csomag1.java). Ezután készítek egy java programot (teszt.java), ami használja a csomagban definiált osztályt (import csomag1).
Ezután változtatok a csomag1.java fájlban, újrafordítom a csomag1-et (de a teszt.java-t nem!!!!) és az eredeti teszt.class újrafordítás nélkül a csomag1 változtatásait ismeri.Lehet hogy egyszerűbb konkért példán keresztül:
Szóval Aru.java:
class Aru {
private String aruNev;
private int nettoAr;
[B]private static int afaKulcs=27;[/B]
public Aru(){
}
public Aru(String aruNev, int nettoAr, int afaKulcs){
this.aruNev=aruNev;
this.nettoAr=nettoAr;
this.afaKulcs=afaKulcs;
}
public String getAruNev(){
return aruNev;
}
public void setAruNev(String aruNev){
this.aruNev=aruNev;
}
public int getNettoAr(){
return nettoAr;
}
public void setNettoAr(int nettoAr){
this.nettoAr=nettoAr;
}
public float getAfaErtek(){
return nettoAr*afaKulcs/100;
}
}Ezután megírom a király számlázó programot ami használja az Aru osztályt (Szamlaz.java) és lefordítom (Szamlaz.class). Közben megváltozik az üzleti logika és ezért a statikus adattagot átírom az új áfa értékre. Lefordítom az Aru.java-t és ezt a számlázó program újrafordítás nélkül tudja alkalmazni.
Az azért már kiderült hogy erre nem jó a csomag módszer, mert teljes újrafordítás kell.
Van erre valami módszer Java SE-ben? Vagy ehhez már valamiféle enterprise megoldás kell?"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
Karma
félisten
válasz bucsupeti #3104 üzenetére
Ha gányolni akarsz, semmi akadálya annak, hogy lefordítsd az egy szál .class fájtt. és kicseréld a JAR-on belül (hiszen az csak egy átnevezett zip)... Feltéve persze, hogy az interfész egyáltalán nem változott.
De ha ilyen jellegű változásra fel akarsz készülni, miért nem konfigurációként tárolod az ÁFA kulcsot, nem pedig a kódba égetve?
[ Szerkesztve ]
“All nothings are not equal.”
-
bucsupeti
senior tag
A példa erőltetett. Persze nem így célszerű ezt megoldani.
Igazából azt szeretném, hogy SE környezetben valahogy modellezni, példaalkalmazást készíteni egy háromrétegű architektúra demonstrálására.
[ui] + [üzleti logika] + [adatbázis]Az ui lenne az a rész amit nem fordítok újra. Az üzleti logikában történik változás és azt akarom demonstrálni hogy ennek a modul változtatása független a többi rétegtől. Az adatbázis meg az ami.
Nyilván ez normális felhasználás esetén JavaBean, servlet meg minden EE csoda segítségével gyönyörűen megvalósítható, de éppen ezeket szeretném "hanyagolni" és SE környezetben, lokálisan valahogy demonstrálni.
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
sztanozs
veterán
-
tknof1871
őstag
Üdv! A Jdownloader-t nem tudom elindítani. Azt írja:
Launch4J
The registry refers to a nonexistent Java Runtime Enviroment installation or the runtimne is corrupted
A rendszer nem találja a megadott elérési utatA Programok telepítése és törlése ezeket a Java-kat sorolja:
Java 7 Update 9
Java(TM) 6 Update 32
JavaFX 2.11Néha feljön a tálcán egy kis ikon, hogy frissíthetem a Java-t, de sosem sikerül végig csinálni. Most nem tudom, mi a hibaüzenet abban az esetben. Mit csináljak?
Windows 10 Home 64 bites operációs rendszer; LG G4 6.0 Android verzió
-
bucsupeti
senior tag
Segítségeteket kérném, mert egyszerűen nem bukkanok rá a megoldásra.
NetBeans 7.2-t használok.Egyszerű JDBC adatbáziskezelő demó programocskát csináltam, amivel demonstráltam a Sakila MySQL demó adatbázis egy tábláján végzett (CRUD) műveleteket. A program konzolra ír, nincs benne semmi extra, teszi a dolgát, működik rendesen.
Csináltam egy másik példaprogramocskát (szintén konzolos), ami ugyan ezen műveleteket végezné el Hibernate-et alkalmazva. Ez is működik rendben.
A problémám az hogy a Hibernate demó program az indulásakor logol a konzolra. Hallottam már a log4j-ről, de én ilyet nem kapcsoltam be sehol egyik programban sem. Ráadásul INFO szinten küldi a logot, azaz szinte mindent kiír. Ha JAR-t csinálok és az futtatom parancssorba ott is írja a logot a konzolra.
Hogyan lehet ezt kikapcsolni? Miért kapcsolódott ez be a Hibernate-es programban?
Itt a teljes log amit kiír:
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.1.GA
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : hibernatedemo/Actor.hbm.xml
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: hibernatedemo.Actor -> actor
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.AnnotationConfiguration secondPassCompile
INFO: Hibernate Validator not found: ignoring
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/sakila
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root}
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: MySQL, version: 5.1.36-community-log
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.18 ( Revision: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
nov. 10, 2012 10:01:51 DE org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.MySQLDialect
nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Using default transaction strategy (direct JDBC transactions)
nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Maximum outer join fetch depth: 2
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL inserts for batching: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
nov. 10, 2012 10:01:52 DE org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
sutszi
veterán
válasz bucsupeti #3112 üzenetére
A log4j.porperties-ben tudsz ilyet állítani...
Pl. log4j.logger.org.hibernate.SQL=FATAL
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
tknof1871
őstag
válasz Superhun #3111 üzenetére
Üdv! Letöröltem mindegyiket. Java 7 Update 9, Java(TM) 6 Update 32, JavaFX 2.11. Elmentem erre az oldalra http://www.java.com/en/download/chrome.jsp?locale=en. Letöltöttem ezt a fájlt: chromeinstall-7u9.exe. Gépet újraindítottam és megpróbáltam telepíteni, de akkor ezt a hibaüzenetet kaptam:
Error - Java Installer
Downloaded File C:\Documents and Settings\ITT AZ ADMIN JOGÚ FIÓKOM NEVE\Application Data\Sun\Java\jre1.7.0_09\java_sp.dll is corrupt.
[OK]Az uninstalálásokat és a telepítést is az admin jogú fiókommal csináltam, amikor a nem admin jogú fiókkal nem voltam belépve. Mit kell most tenni?
Windows 10 Home 64 bites operációs rendszer; LG G4 6.0 Android verzió
-
sutszi
veterán
válasz tknof1871 #3114 üzenetére
Innen próbáld leszedni az offline telepítőt: [link]
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
bucsupeti
senior tag
NetBeans Platformos kérdésem lenne.
Szerintetek egy swing vastagkliens alkalmazásba hol célszerű a Hibernate konfigurációt intézni?
Hol inicializálódjon a SessionFactory?Mivel ennek az egész program alatt működnie kell én arra gondoltam hogy a main()-ban valahol. Viszont ha ott indul és a main egyik lokális változójába teszem a SessionFactory-t, akkor azt máshol nem érem el.
Ezért arra gondoltam hogy a main()-t tartalmazó osztály adattagja kell hoyg legyen a SessinFactory, így a teljes programban érvényes lesz és használható, lehet belőle Session-t kérni stb...Jó ez a gondolat? A NetBeans tutorialban egy külön metódus van definiálva a query futtatására, majd abból van megjelenítve (egy jTable komponensbe). Nem is ez a lényeg.
Nekem az a fura hogy ez a tutorial-os példa minden egyes gombnyomásra futtat egy lekérdezést. Ehhez minden egyes alkalommal felépíti a SessionFactory-t (azaz beolvastatja a hibernate.cfg.xml-t és a mappingokat stb). Ez számomra logikátlannak tűnik és fölöslegesnek tűnik.
A könyvek azt írják hogy elég egyetlen SessionFactory egy adatbáziskapcsolathoz és ezen indítsuk a session-öket és a tranzakciókat. Ezzel ez tök ellentétes.
Erősítsetek meg, vagy magyarázzátok meg hogy miért jó úgy ahogy a tutorialban van. Ti hogy csinálnátok?Köszi a válaszokat!
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
sutszi
veterán
válasz bucsupeti #3116 üzenetére
A SessionFactory egy nagyon költséges objektum. Alkalmazásonként egyet "szoktak" használni...
Hogy hová "teszed" az tervezési kérdés. A láthatóság és más egyéb témákról pedig még olvass utána mert ez így még kevés...
Adok egy tippet: Nézd meg a Spring Framework hogyan kezeli ezt...Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
sutszi
veterán
válasz bucsupeti #3118 üzenetére
http://javabrains.koushik.org/
Ez szerintem az egyik legjobb alapozó...
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
Nyle
csendes tag
Sziasztok
Java programozást kezdtem tanulni könyvekből, mert érdekel nagyon, és tetszik is.
Kellene egy kis segítség.int weight = 250;
weight = weight + 0,45 * 3;Nem fogadja el a 0,45-öt (nem fordul le) és semmilyen nem egész számot. Megoldható valahogy ? vagy floatba lehet csak ?
Előre is köszönöm.
[ Szerkesztve ]
-
addikt
Két alapvető dolgot tegyünk tisztába:
1. A tizedesvesszőt ponttal jelölik szinte minden prognyelvben
2. Int típusú változnak nem adhatsz értékül lebegőpontos számot. Tehát vagy lebegőpontosként definiálod a weight változót,// lebegőpontos, a szám végén egy f betűvel jelöljük
float weight = 250.0f;
weight += 0.45f * 3;
// dupla pontosságú lebegőpontos
double weight = 250.0;
weight += 0.45 * 3;vagy castolod a jobboldalt egész számmá:
weight += (int)(0.45f * 3);
Az utóbbinál figyelni kell, mert pontosságot veszíthetsz.
Sok sikert a tanuláshoz!
-
Nyle
csendes tag
válasz Superhun #3122 üzenetére
Köszi!
Valahogy sejtettem, hogy csak így lehet.
weight = 0.45 * 3; ez a rész elég is volt
A tizedes vesszőt csak megszokásból írtam így, de már kezdem megszokni a dolgokat.Viszont lenne egy újabb kérdésem
Elöljáróban még annyit leszögeznék, hogy soha nem programoztam és nem is tanultam programozást.
De nagyon érdekel és tetszik is. Ezután a java mellett döntöttem.Szóval adott az alább kód
public class Matek {
public static void main(String[] args) {
int x = 5;
int y = 6;
System.out.println("Matek 5 to the second plus 6 to the second equal");
int number = (x * x) + (y * y);
System.out.println("Matek " + number);
}
}A feladat az lenne, hogy 2 szám négyzetét kiszámolja majd összeadja és azt megjeleníti.
Le is fut és jól is működik. Nem is hibával kapcsolatos a kérdésem, inkább azt szeretném tudni, hogy van e más megoldás 2 szám négyzetének kiszámolására ? keresgettem googleban, de nem találtam olyat ami nekem jó lenne. vagy csak még nagyon kezdő vagyok
Lehet nektek csúnya a fenti kód, de tőlem most csak ennyire futotta!
Várom a véleményeket.Előre is köszönöm.
-
Karma
félisten
Ez a számítás teljesen jó ebben a formában szerintem.
A Math osztályban találsz tetszőleges hatványra emelő metódust, de a négyzet pont olyan, hogy ezért felesleges ezt bevonni.
---
Az alaphelyzetre visszatérve nem vagyok annyira meggyőződve arról, hogy jól választottál nyelvet. Amit most írsz stílus, ami egyszer strukturált programozásig fejlődhet, szerintem nem igényli a Javát; viszont rossz Java programozási gyakorlatot ültethet el a fejedben, amit nehéz lesz kiirtani.
[ Szerkesztve ]
“All nothings are not equal.”
-
Nyle
csendes tag
Újabb kérdés! (elnézést a sok kérdés miatt)
Adott az alábbi kód
public class Credits {
public static void main(String[] args) {
// a film adatainak beállítása
String title = "The Piano";
int year = 1993;
String director = "Jane Campion";
String role1 = "Ada";
String actor1 = "Holly Hunter";
String role2 = "Baines";
String actor2 = "Harvey Keitel";
String role3 = "Stewart";
String actor3 = "Sam Neill";
String role4 = "Flora";
String actor4 = "Anna Paquin";
String change = director.toUpperCase();
// az adatok megjelenítése
System.out.println(title + " (" + year +")\n" +
"A " + director + " film.\n\n" +
role1 + "\t" + actor1 + "\n" +
role2 + "\t" + actor2 + "\n" +
role3 + "\t" + actor3 + "\n" +
role4 + "\t" + actor4 + "\n" +
change);
}
}A kiemelt részek felelősek a director nagybetűvel való megjelenítésért, az kérdésem is ehhez kapcsolódó lenne. Lehetséges úgy átírni a kódot hogy az actorokat és a rolekat egy Stringben alakítsa át nagybetűsre ?
a megjelenítés már nem lényeges.Előre is köszönöm.
update: Nem lehet kódban kiemelni vagy csak nekem nem akarja az igazságot.
String change = director.toUpperCase();
ez lenne a lényeges rész.[ Szerkesztve ]
-
Karma
félisten
Hogy mit szeretnél? Fontos lépés a programozásban, hogy pontosan tudod mit és miért akarsz csinálni. A zajt kordában kell tartani.
Jelen példa esetén nekem nem jött át a szándék. Kifejthetnéd.
Mindenesetre ha egy nagy stringben akarsz mindent összegyűjteni, akkor nincs más dolgod, mint összefűzöd őket. A rossz megoldás a + operátor, a kicsit jobb a StringBuffer/StringBuildet használata, nekem személy szerint az Apache Commons Lang nevű library StringUtils.join() metódusa tetszik a legjobban - nem vagyok a kerék újrafeltalálásának híve.Persze a gyakorlás az más tészta. De akkor is legyen legalább minimális értelme.
“All nothings are not equal.”
-
Lacces
őstag
Nekem sem tiszta, mit akarsz pontosan, de lehet én vagyok lüke hozzá.
Ez lehet az amire gondoltál szerintem:
String result = title + " (" + year +")\n" +
"A " + director + " film.\n\n" +
(role1 + "\t" + actor1 + "\n" +
role2 + "\t" + actor2 + "\n" +
role3 + "\t" + actor3 + "\n" +
role4 + "\t" + actor4 + "\n" +
change).toUpperCase();
System.out.println(result);
role1-től a change-ig minden nagybetűs a többit meg kicsiben hagyja a result Stringben.
A toUpperCase() után oda lehet szúrni a toStrin()-et is de ez nem kötelező, anélkül is nagybetűsre alakítja.Karma hsz-e is hasznos. De szerintem még nem tartasz ott, hogy tud, ő miért javasolta a StringBuildert Bár az is, igaz, hogy inkább forciklusban használják a StringBuildert.
Ennek oka röviden, hogy a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan. Ha úgy mond konketenálsz egy String-et akkor új String jön létre.
role1 + "t" -> akkor ez egy új String objektum ami a memóriában van, és nem a régi módoítottad, ami szintén a memóriában van, és marad a program végéig! StringBuilder esetében pedig a régit tudod módosítani, és így csak String objektum van a memóriában. A JVM nem módosítja sosem a Stringeket, hanem újat hozz létre mindig! És ezzel eszi a memóriát. És ez azért is baj, mert a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket.
Bár van egy előnye ennek, az ha mégegyszer egy ugyanolyan String objektum jön létre (ugyanaz az értéke), akkor a JVM nem hozz létre új Strng-et hanem egész egyszerűen már egy meglévőre hivatkozik.
De ha tévedet, jönnek a többiek és nagy örömmel kijavítanak.[ Szerkesztve ]
-
addikt
"a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"
Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben.
"a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket"
Ezt nem gondolhatod komolyan. Elég sok alkalmazás kapna így out of memory-t . Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is. A futás időben keletkezett String objektumok viszont mindig a heap-re kerülnek, amiket pedig a GC eltakarít, ha már nincs rájuk hivatkozás.
Példa:
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);Eredmény: true
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2);Eredmény: false
[ Szerkesztve ]
-
Lacces
őstag
válasz Superhun #3139 üzenetére
Módosítani lehet, de hozzáadni új karaktert is? Úgy hogy ugyanaz az objektum.
Na igen, az első variáció, azt tudtam... az a literal pool. Erről olvastam is.
A második jah, abban igazad van, azt most megnéztem anno kódot, és rosszul következtettem rá, mert ott nekem str1.equals(str2) van..., Igen, és az objektum a kupac memória kerül, ahol a gc garázdálkodik és csak a lokális változók és a tagfüggvények kerülnek a verembe.
Igaz, félre beszéltem, köszönöm a helyesbítést
-
gygabor88
tag
válasz Superhun #3139 üzenetére
"
"a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben."
A String immutable, nem modosithatod, a charAt pedig pont visszaad egy karaktert es nem modositja azt.
"Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is."
Java 7-tol az interned stringek is atkerultek a permanent generationbol a young es old generationbe tehat nem igaz, hogy a heaptol fuggetlenek.
-
Nyle
csendes tag
Na szóval akkor újra!
public class Credits {
public static void main(String[] args) {
// a film adatainak beállítása
String title = "The Piano";
int year = 1993;
String director = "Jane Campion";
String role1 = "Ada";
String actor1 = "Holly Hunter";
String role2 = "Baines";
String actor2 = "Harvey Keitel";
String role3 = "Stewart";
String actor3 = "Sam Neill";
String role4 = "Flora";
String actor4 = "Anna Paquin";
// az adatok megjelenítése
System.out.println(title + " (" + year +")\n" +
"A " + director + " film.\n\n" +
role1 + "\t" + actor1 + "\n" +
role2 + "\t" + actor2 + "\n" +
role3 + "\t" + actor3 + "\n" +
role4 + "\t" + actor4 );
}
}Ez az eredeti kód.
Mikor futtatom akkor megjeleníti a szövegeket. (tudom, hogy tudjátok csak magam miatt írom le)
Pl: Ada Holly Hunter
Baines Harvey Keitel
stb
És az volna a kérdésem, hogyan lehet a legkönnyebben úgy megváltoztatni a kódot, hogy csak az actorok és a director legyen Teljesen nagybetűvel a többi marad az eredetiben.String change = director.toUpperCase();
Ugye ez megváltoztatja a directorhoz rendelt Jane Campion nevet JANE CAMPION-ra
+ "\n" + change
Ez pedig megjeleníti.Na már most azóta én már átírtam a kódot, így fest most.
public class Credits {
public static void main(String[] args) {
// a film adatainak beállítása
String title = "The Piano";
int year = 1993;
String director = "Jane Campion";
String role1 = "Ada";
String actor1 = "Holly Hunter";
String role2 = "Baines";
String actor2 = "Harvey Keitel";
String role3 = "Stewart";
String actor3 = "Sam Neill";
String role4 = "Flora";
String actor4 = "Anna Paquin";
// az adatok egy részének, nagy betűvel való megjelenítése
String changedirector = director.toUpperCase();
String changeactor1 = actor1.toUpperCase();
String changeactor2 = actor2.toUpperCase();
String changeactor3 = actor3.toUpperCase();
String changeactor4 = actor4.toUpperCase();
// az adatok megjelenítése
System.out.println(title + " (" + year +")\n" +
"A " + changedirector + " film.\n\n" +
role1 + "\t" + changeactor1 + "\n" +
role2 + "\t" + changeactor2 + "\n" +
role3 + "\t" + changeactor3 + "\n" +
role4 + "\t" + changeactor4);
}
}A kérdés még mindig az, hogy van-e rövidebb megoldás erre ? vagy ez így jó ?
Elnézést, hogy ilyen hosszúra sikeredet.Köszönöm a segítségetek.
-
D4nte
csendes tag
A change* változókba nem szükséges külön eltárolnod a nagybetűsített dolgokat, annyi, hogy a printedben hívod meg ugyan új a függvényt az eredetiekre, amennyiben a kiíratáson kívül másra nem akarod használni ezeket a nagybetűsített verziókat. Ettől még az eredeti stringek (az előző hozzászólásokból is kiderülten) változatlanok maradnak.
-
Nyle
csendes tag
Értem, de nem teljesen jó (biztos béna vagyok még)
String change = actor1.toUpperCase();
String change = actor2.toUpperCase();Az első még jó, de a másodiknál már nem fogadja el
change is already defined in main(java.lang.String[])
String change = actor2.toUpperCase();change után definiálni kell, a változtatandót ?
vagy teljesen rosszul értelmeztem ? -
D4nte
csendes tag
A legegyszerűbb akkor, ha meg is mutatom, amit leírtam.
public class Credits {
public static void main(String[] args) {
// a film adatainak beállítása
String title = "The Piano";
int year = 1993;
String director = "Jane Campion";
String role1 = "Ada";
String actor1 = "Holly Hunter";
String role2 = "Baines";
String actor2 = "Harvey Keitel";
String role3 = "Stewart";
String actor3 = "Sam Neill";
String role4 = "Flora";
String actor4 = "Anna Paquin";
// az adatok megjelenítése
System.out.println(title + " (" + year + ")\n" + "A "
+ director.toUpperCase() + " film.\n\n" +
role1 + "\t" + actor1.toUpperCase() + "\n" +
role2 + "\t" + actor2.toUpperCase() + "\n" +
role3 + "\t" + actor3.toUpperCase() + "\n" +
role4 + "\t" + actor4.toUpperCase());
}
}
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- iPhone topik
- Sorozatok
- Diablo 3
- Villanyszerelés
- Kerékpárosok, bringások ide!
- Újabb Samsungok telepíthetik a Galaxy AI-t
- bb0t: Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- Mindent megtudtunk az új Nokia 3210-ről
- Milyen billentyűzetet vegyek?
- Képeken az egyik kameráját elvesztő Sony Xperia 10 VI
- További aktív témák...
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest