Heló!
Igazából még csak nemrég kezdtem az egészet. Egy ebookból tanulok és ott nem magyarázták meg a dolgot. Szóval van egy ilyen pl.:
public class AClass {
public int instanceInteger = 0;
public int instanceMethod() {
return instanceInteger;
}
public static int classInteger = 0;
public static int classMethod() {
return classInteger;
}
public static void main(String[] args) {
AClass anInstance = new AClass();
AClass anotherInstance = new Aclass();
anInstance.instanceInteger = 1;
anotherInstance.instanceInteger = 2;
System.out.println(anInstance.instanceMethod());
System.out.println(
anotherInstance.instanceMethod());
//System.out.println(instanceMethod()); //illegal
//System.out.println(instanceInteger); //illegal
AClass.classInteger = 7;
System.out.println(classMethod());
System.out.println(anInstance.classMethod());
anInstance.classInteger = 9;
System.out.println(anInstance.classMethod());
System.out.println(anotherInstance.classMethod());
}
}
Na ebben vannak olyanok a metódusban pl/anInstance.instanceInteger = 1;/ A kérdésem mit jelent az a pont?
Gyorskeresés
Legfrissebb anyagok
Általános témák
LOGOUT.hu témák
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [sziku69:] Szólánc.
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [Mr Dini:] Mindent a StreamSharkról!
- [Re:] [Sub-ZeRo:] Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- [Re:] [ldave:] New Game Blitz - 2024
- [Re:] [potyautas:] Miért olyan drága?
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
GAMEPOD.hu témák
Hozzászólások
caindwan
tag
WonderCSabo
félisten
Az AClass egy példányának, anInstance-nek az instanceInteger adattagját lekéri, majd 1 -et ad neki értékül.
TBG
senior tag
Szia!
Van egyszerű, ronda és bonyolultabb, szebb megoldás.
1. Egyszerű, ronda.
Az AppPanel osztályt átadod a *Form-oknak konstruktorban.
2. Bonyolultabb, szebb
Csinálsz egy Listener interface-t, amit az AppPanel implementál és ott zárogatod be, ami kell.
ZTE Grand X powered by Intel® Atom™, Eladó: Panasonic HC-V10 HD+16GB SD kártya 25K.
caindwan
tag
Ha van egy ilyen tömböm:
public boolean[] bortonajtok = {false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false};
És ez a metódus:
public boolean kulcsFordit(){
if(bortonajtok[ajto] == false){
bortonajtok[ajto] = true;
return bortonajtok[ajto];
}
else{
bortonajtok[ajto] = false;
return bortonajtok[ajto];
}
/remélem jól vannak megírva/ Hogyan tudom használni a tömbön a metódust?
sutszi
veterán
Attól függ mi a cél?
Feltételezem egy van egy börtönöd aminek egy bizonyos ajtaját ki akarod nyitni...
Én inkább egy ilyet írnék:
public void kulcsFordit(boolen[] bajtok){
for (i = 0; i<bajtok.length; i++) {
if(bajtok [i]== false){
bajtok(i) = true;
}
}
}
Ez azt csinálja, hogy megkapja a bortonajtok tombjet, végig meg rajta és ami be van zárva azt kinyitja...
Így használhatod:
this.kulcsFordit(bortonajtok);
Remélem nem írtam el semmit kicsit kapkodtam...de a kérdés, hogy mit szeretnél továbbra is áll.
[ Szerkesztve ]
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
Mukorka
addikt
Az ajto változót át kéne adnod a függvénynek:
public boolean kulcsFordit(int ajto){
if(!bortonajtok[ajto]){
bortonajtok[ajto] = true;} //ha mást úgyse csinál az fv-d akkor itt kb még vizsgálni is felesleges...
return bortonajtok[ajto];
}
//használni meg így lehet:
boolean fordit = kulcsFordit(4);
Szerintem ennek nem sok értelme van
(#3758) Athlon64+ : Erre gondolhatott, gyanús.
[ Szerkesztve ]
Mukor#2214 --- "Ezt nem én gondolom így, EZ EGY TÉNY!"
public void kulcsFordit(boolen[] bajtok) {
for (i = 0; i < bajtok.length; i++) {
bajtok[i] = !bajtok[i];
}
}
Jim-Y
veterán
Szerintem:
public void kulcsFordit(boolean[] bortonajtok,int ajto){
bortonajtok[ajto] = (bortonajtok[ajto]) ? false : true;
}
Használat:
kulcsFordit(bortonajtok, 10)
Így megadod, hogy melyik ajtót szeretnéd kinyitni / becsukni. üdv
Karma
félisten
Ezt kene otvozni az elotted levo felkialtojeles megoldassal es szerintem megvan a nyertes Boolean valtozo invertalasanal teljesen felesleges a ?: operator.
Ha tippelnem kene, ebbol valamikor a klasszikus bortonor problema lesz (100 zart cella, az or eloszor mindegyiet kinyitja, aztan minden masodikat becsuk, aztan minden harmadikat atbillent... egeszen szazig). Mondjuk ertelme nincs sok, biztosan iskolai feladat.
[ Szerkesztve ]
“All nothings are not equal.”
Jim-Y
veterán
Na igen, leírtam, mondom ez fasza, aztán visszaolvastam egyet, és leesett, hogy úgy mégjobb lenne,buuurn beírni már nem írtam be viszont
(#3754) TBG Köszi a választ, végül mindkettőt felhasználtam a programban, de a problémámhoz a konstruktorban objektum átadós módszert választottam most.
[ Szerkesztve ]
WonderCSabo
félisten
invertalasanal teljesen felesleges a ?: operator
Igen, a másik kedvencem:
return i > 0 ? true : false;
fatal`
titán
Ennél már csak az if (i>0) return true else return false jobb
TBG
senior tag
Lehet fokozni a hülyeséget
boolean result = i>0;
if (result==true) {
return true;
} else {
return false;
}
[ Szerkesztve ]
ZTE Grand X powered by Intel® Atom™, Eladó: Panasonic HC-V10 HD+16GB SD kártya 25K.
fatal`
titán
Jó, ilyet szerintem senki nem ír.
WonderCSabo
félisten
Egyetemen java házikat javítok (illetve előző félévben cpp-t), hát láttam már pár érdekes dolgot, ehhez hasonlókat is.
caindwan
tag
Az a cél, hogy a nyitott ajtót becsukja és fordítva.
Köszönöm
caindwan
tag
Igen iskolai feladat
[ Szerkesztve ]
attiati
veterán
Java Eclipse feladat megoldására keresek jelentkezőt fizettségért cserébe. Lásd ---> hirdetés
[ Szerkesztve ]
Szorít a beadandó határidő?
attiati
veterán
Ne kötekedj Atrix 2 bajtárs
Nem erről van szó.
peterszky
őstag
Java Web Starttal indított ablakot fel lehet úgy konfigurálni, hogy átméretezhető legyen?
What else you gonna do on a Saturday?
artiny
őstag
Egy GUI-adatbazis kezelo turtorial szerint mentem ... a program lefut,mukodik csak egy bajom van vele. Ha uj sort akarok berakni az adatbazisba es miutan beraktam az uj elemet es elmentem lefagy a progi,nem tudok vissza menni,hogy ide - oda ugraljak az adatbazis elemei kozott.
Ha lezarom az X el a programot es ujbol elinditom akkor az uj elem ott van.
Hogyan lehetne megoldani,hogy ne fagyon le a progi es vissza ugorjon oda,ahol mutassa az elemeket a textfield.
a program kod a save button -hoz:
TURTORIAL forras:
http://www.homeandlearn.co.uk/java/save_a_new_record.html
a program kod a save button -hoz:
http://pastie.org/7915215
TBG
senior tag
Az új sor hozzáadáshoz inkább az insert sql direktívát használd!
ZTE Grand X powered by Intel® Atom™, Eladó: Panasonic HC-V10 HD+16GB SD kártya 25K.
TBG
senior tag
Tehát. Itt ez a remek kód.
try {
rs.moveToInsertRow();
rs.updateInt("ID", newID);
rs.updateString("First_Name", first);
rs.updateString("Last_Name", last);
rs.updateString("Job_Title", job);
rs.insertRow();
stmt.close();
rs.close();
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql = "SELECT * FROM Workers";
rs = stmt.executeQuery(sql);
Ehelyett inkább: (nem teljes és nem is ismerem a táblastruktúrát)
String insertSql = "INSERT INTO Workers(id,firstname) VALUES("+newID+","'"+firs+"'");
stmt.executeUpdate(insertSql);
[ Szerkesztve ]
ZTE Grand X powered by Intel® Atom™, Eladó: Panasonic HC-V10 HD+16GB SD kártya 25K.
artiny
őstag
helo.
ilyen hibat ir ki, az adatbazis szerkezete lathato a kepen es a hiba is amit kiir a netbeans,pirossal jelez a kodreszre....
http://i.imgur.com/XfOyBv2.png
megj.: az adatbazist ez alapjan lett: http://www.homeandlearn.co.uk/java/java_and_databases.html
[ Szerkesztve ]
gygabor88
tag
Elegge egyertelmuen leirja, hogy nyitottal egy karakter literalt es nem zartad le. A karakter literal helyett csak fuzd a vesszo utan a first string erteket es egy bezaro zarojelet. Talan a ; is kelleni fog az sql stringbe, nem emlekszem mar.
[ Szerkesztve ]
artiny
őstag
próbáltam ilyet...bar ez sem mukodik.
updateInt("ID", newID); // a newID deklaraltam,mivel nincs ilye..bar nem tudom h most kell e (hibat jelez)
String insertSql = "INSERT INTO Workers (ID,FIRST_NAME,LAST_NAME,JOB_TITLE) VALUES("+newID+","'"+firs+"'","'"+last+"',"'"+job+"'"); // unclosed character literal.t jeley
stmt.executeUpdate(insertSql);
[ Szerkesztve ]
Jim-Y
veterán
Így próbáldd:
String insertSql = "INSERT INTO Workers (ID,FIRST_NAME,LAST_NAME,JOB_TITLE) VALUES("+newID+",'"+first+"','"+last+"','"+job+"';");
artiny
őstag
erre az irta hogy ";" expected
gygabor88
tag
Mert a lezaro zarojel a string literalon kivulre kerult.
Jim-Y
veterán
String insertSql = "INSERT INTO Workers (ID,FIRST_NAME,LAST_NAME,JOB_TITLE) VALUES(" + newID + ",'"+first+"','"+last+"','"+job+"');";
kimaradt a csukó zárójel..
artiny
őstag
Koszonom a valaszokat
most lefut
De viszont ezt irja amikor elakarom menteni az uj rekordot(elemet az adatbazisban):
Syntax error: Encountered ";"
probaltam igy,hogy a kod vegen kihanyom a ..st+"','"+job+"');"; ) utáni ; jelet,erre ezt irta:
ResultSet not open. Operation 'next' not permitted.
Melyikel lehet tovabb halladni,ha a st+"','"+job+"');"; a zarojel utan a ; kell oda vagy az nelkul es megkeresni hol blokkolodik a next ?
[ Szerkesztve ]
gygabor88
tag
Na a kovetkezo a helyzet. Elolvastam a kodot is, amit fentebb linkeltel es tobb problema is van.
Eloszor is ugyanarrol a threadrol irsz es olvasol adatbazist, amelyikrol GUI elemeket modositasz. A GUI tipikusan nem thread safe, a hozza tartozo elemeket (buttonok pl) a GUI threaden kell modositani. Ezen a threaden pedig nem kellene blokkolo muveleteket pl DB kezelest inditani, mert megakad az egesz felulet tole.
A masik, hogy a ResultSet-en azutan hivod meg a next() metodust miutan meghivtad a close() metodust (executeUpdate mar nem ad vissza uj ResultSetet igy a regi lezartat fogod hasznalni tovabb) es ezert kapsz "ResultSet not open. Operation 'next' not permitted." hibauzenetet.
A harmadik pedig, hogy konnyebb dolgod lenne, ha a string osszefuzogetes helyett PreparedStatementet hasznalnal, ha mar mindenkepp JDBC-vel kell megoldani a feladatot es nem hasznalhatsz valami ORM frameworkot.
[ Szerkesztve ]
Taoharcos
aktív tag
Az alábbi lenne a problémám. Egy oldalon név - jelszó párost olvasok be, amit egy statikus ArrayList-ben tárolok. Amikor hozzáadom a listához (addUser), akkor a contains -el még ellenőrizni tudom, hogy a lista tartalmazza-e, utána a loginUser-nél a contains false lesz a már felvitt név - jelszó párossal. Az ArrayList pedig tartalmazza, amíg be nem zárom a programot, mert a toString-el kiíratom és ott van.
[ Szerkesztve ]
Taoharcos
aktív tag
Ja valami kód is:
package com.corejsf;
public class User {
private String name;
private String password;
public User(String name, String password){
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.corejsf;
import java.io.Serializable;
import java.util.*;
import javax.faces.bean.*;
@ManagedBean(name="userbean")
@SessionScoped
public class UserBean implements Serializable{
private String name;
private String password;
private String userListToString;
private static List userList = new ArrayList();
private User user;
public String addUser(){
user = new User(name, password);
userList.add(user);
userListToString = userList.toString();
if (userList.contains(user)){
return "thankYou";
}
else {
return "loginFail";
}
}
public String loginUser(){
user = new User(name, password);
userListToString = userList.toString();
if(userList.contains(user)){
return "thankYou";
}
else{
return "loginFail";
}
}
public String getUserListToString() {
return userListToString;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Mukorka
addikt
A loginUser fv hiába csinál a meglévő adatokkal új user objektumot , az mint példány még nincs benne az arraylist-ben ezért lesz false. Mivel nem írtad felül az equals függvényt a User osztályban így az alapértelmezett (örökölt) equals azt nézi hogy ugyan az-e a két objektum memóriában tárolt elérési címe. Ez azért lényeges mivel az ArrayList is a tárolt elemek equals függvényét használja ahhoz hogy megmondja mi van a listában és mi nincs.
[ Szerkesztve ]
Mukor#2214 --- "Ezt nem én gondolom így, EZ EGY TÉNY!"
WonderCSabo
félisten
Még annyi, hogy ha az equals() -ot felüldfiniáljuk, akkora hashCode()-ot is kell. Az eclipse jobb gomb -> Source -> Generate equalst() and hashCode() funkciója megteszi ezt helyettünk.
gygabor88
tag
Az elottem szolokhoz meg annyit tennek hozza, hogy ha csak a contains()-t hasznalod egyelore, akkor ArrayList helyett erdemes lenne LinkedHashSetet hasznalnod. Ez a sorrendet is tartja es hatekonyabb a contains() hivas. + a collectionoknek adj meg generic tipust is <> koze.
Mukorka
addikt
Ha már tanácsadás megy nagyban: A ManagedBean name értéke lehetne userBean , nem pedig userbean.
Ha Serializable interface-t implementálsz akkor pedig vagy legyen serialVersionUID megadva (ezt generálja magától az eclipse is ha megkéred rá) vagy legyen Annotálva az osztály : @SuppressWarnings("serial").
Kerüld a "felkiáltójeles" kódot!
Ui: inkább cseréld le a listában tárolt user megoldást adatbázisban tároltra.
[ Szerkesztve ]
Mukor#2214 --- "Ezt nem én gondolom így, EZ EGY TÉNY!"
artiny
őstag
a blokkolo dolgokat kivettem mar es az ket darab enabledot is bekapcslam a ket gombra.(save es a cancelra)
Amikt irtal a ResultSet rol azt azzal nem oldahato meg ha kommentelem a .close(); -t?
a save button ilyen most:
private void btnSaveRecordActionPerformed(java.awt.event.ActionEvent evt) {
//...................................................................................
String first = textFirstName.getText();
String last = textLastName.getText();
String job = textJobTitle.getText();
String ID = textID.getText();
int newID = Integer.parseInt(ID);
try {
VALUES("+newID+",'"+first+"','"+last+"','"+job+"')";
String insertSql = "INSERT INTO Workers (ID,FIRST_NAME,LAST_NAME,JOB_TITLE) VALUES(" + newID + ",'" + first + "','" + last + "','" + job + "')";
stmt.executeUpdate(insertSql);
rs.next();
int id_col = rs.getInt("ID");
String id = Integer.toString(id_col);
String first2 = rs.getString("First_Name");
String last2 = rs.getString("Last_Name");
String job2 = rs.getString("Job_Title");
textID.setText(id);
textFirstName.setText(first2);
textLastName.setText(last2);
textJobTitle.setText(job2);
} catch (SQLException err) {
System.out.println(err.getMessage());
}
PreparedStatementet -pedig most utana nezek
[ Szerkesztve ]
artiny
őstag
mar mukodik.
modder
aktív tag
Illetve a private static List userList = new ArrayList();-t tedd inkább egy @ApplicationScoped bean-be nem static-ként, mert semmi garancia nincs rá, hogy egy konkurens felhasználó, akit másik http worker szál szolgál ki szerver oldalon, ugyanazt fogja látni a userList-ből.
Taoharcos
aktív tag
Köszönöm a sok tanácsot, sok hasznos instrukciót kaptam.
Végül az alább látható containsUser-el oldottam meg a feladatot. Mi a véleményetek a megoldásról?
package com.corejsf;
import java.io.Serializable;
import java.util.*;
import javax.faces.bean.*;
@ManagedBean(name="userbean")
@SessionScoped
public class UserBean implements Serializable{
private String name;
private String password;
private String userListToString;
private static ArrayList userList = new ArrayList();
private User user;
public String addUser(){
user = new User(name, password);
userList.add(user);
userListToString = userList.toString();
if(containsUser(userList, user)){
return "thankYou";
}
else {
return "loginFail";
}
}
public boolean containsUser(ArrayList<User> userList, User user){
boolean isContainsUser = false;
for(int i = 0 ; i < userList.size(); i++ ){
if(userList.get(i).getName().equals(user.getName())&&userList.get(i).getPassword().equals(user.getPassword())) {
isContainsUser = true;
}
}
return isContainsUser;
}
public String loginUser(){
user = new User(name, password);
userListToString = userList.toString();
if(containsUser(userList, user)){
return "thankYou";
}
else{
return "loginFail";
}
}
public String getUserListToString() {
return userListToString;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
A JSF-el ismerkedem, csak közben gondoltam, egy kis kitérőt teszek az ArrayList irányába. Természetesen később nyilván egy adatbázis a végső megoldás. De egyszerre kezdőként nem akarok több dolgot is csinálni.
[ Szerkesztve ]
WonderCSabo
félisten
Sokkal szebb lett volna az equals-t és a hashcode-ot felüldefiniálni. A collectionnek télleg mindenképpen kéne adnod generikus típusparamétert.
Másrészt ha már megtaláltad, térj vissza rögtön, mert utána már felesleges iterálni tovább a listán.
artiny
őstag
Valaki csinalt mar ms access filet hozza kapcsolni java hoz.?
van ez a kod:
public void Connect() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// String DatabaseFile = "D:java/Invertory.mdb";
// String DATABASE =
// "jdbc:odbc:Driver="
// + "{Microsoft Access Driver (*.mdb, *.accdb)};"
// + "DBQ=" + DatabaseFile;`enter code here`
String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (*.mdb, *.accdb);DBQ=Invertory.mdb";
CONEX = DriverManager.getConnection(DATABASE);
} catch (Exception X) {
X.printStackTrace();
//JOptionPane.showMessageDialog(null,e);
}
}
ez az error uzenet:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
http://www.youtube.com/watch?v=Of4LRHOZoII
hozza adtam a control panelben az ODBC nel az Access drivert.
http://i.imgur.com/CAXievm.png
TBG
senior tag
Plusz:
private static ArrayList userList = new ArrayList();
helyett:
private static List userList = new ArrayList();
ZTE Grand X powered by Intel® Atom™, Eladó: Panasonic HC-V10 HD+16GB SD kártya 25K.
WonderCSabo
félisten
Sztem ez egyáltalán nem hiba, ha ArrayList-et használ statikus típusként. Miért is lenne az? Az viszont sokkal nagyobb probléma, hogy nem használ generikus paramétereket.
Ez miért lenne hiba?
Téma tudnivalók
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
Mai Hardverapró hirdetések
prémium kategóriában
- MINI ITX GAMING/STREAMING PC RYZEN 5 7600X RTX 3080TI 32GB RAM MESHLICIOUS
- GAMER PC i5 6600K 16GB DDR4 SSD+HDD GIGABYTE 1070 8GB GDDR5 256BIT WINDFORCE
- Apple watch series 5 40mm gps + cellular rose gold I Ingyenes Foxpost csomagküldés!
- ESR Rebound 360 Magnetic Keyboard Case (ENG) - iPad Pro / Air
- Új Gamer PC i5 12400F/13400F/24Gb DDR5/RX 6600 vagy RX 6600 XT 8Gb/500Gb M2 SSD/700W 2-3 Év gari