Siralmasnak nem mondanám, de a JAVA-nak része bizonyos konvenciók betartása.
Ilyen pl. hogy lehetőleg minél kevesebb kerüljön a "main" metódusba.
Ha ugyanis azt szeretnéd, hogy a programod működjön appletként is, akkor meg kell írni az többek között az init() metódust is, amit a böngésző hív meg indításkor.
Tehát a main()-be és az init()-be lehetőleg csak azok az adott futtatási módra jellemző részek kerüljenek.
A vektorrendezéses programod pl. jó alkalom lenne annak gyakorlására, hogy a JAVA-ban hogyan lehet függvényeket "paraméterként" átadni.
Próbáld meg a main() metódusodat ennek szellemében átírni.
P.S.:
az
int i;
char myChar;
i = (int) myChar;
szerkezeteket tipusátalakításnak (cast) nevezik.
Az erre vonatkozó szabályok egy külön (de rövid) fejezetet szoktak képezni a JAVA könyvekben.
van egy kis problemam, remelem, tud valaki segiteni...
szóval van egy Java appletem. Ez egy olyan textfile-t nyit meg olvasasra, ami azon a szerveren van, ahonnan az applet letoltodott. A gaz csak az vele, hogy hogyha frissitem a textfile-t, akkor az applet tovabbra is a cache-bol veszi a file-t. Probaltam mar mindenfele setUseCaches-t meg mindenfelet, de nem jott be. Nem tudja valaki, hogy mi lehet a gond?
Amugy megjegyzem: a Java bytecode igen jol ki lett talalva, nagyon effektiv es tenyleg konnyu olyan processzort kesziteni, aminek a bytecode a nativ assembly nyelve.
De, es ez nagyon fontos: ezekre a processzorokra ugye uj jdk-t kell irni. Ugyanis a jdk tele van nativ hibasokkal (halozat, filekezeles, AWT), ami ertelemszeruen nem igazan mukodo megoldas itten :))
Ugyhogy mielott ennek nekiallnanak, szabvanyositani kene ezeket a megoldasokat.
következménye, hogy a JVM önmagában is elegendő lesz a futtatásához. A kérdésem az, hogy látott-e már valaki olyan technológiát, ami ilyen bájtkódot állít elő. (Vagy ennek hiányában hogyan képzelitek el a bájtkódot közvetlenül futtató processzorok működését?)
Elvileg a Transmeta processzorai tudnak (vagy tudni fognak?) ilyent. Ott ugyanis kvazi mikroprogramozassal lehet kialakitani az opcode-okat teljesen dinamikusan.
readChar()/readKey()
Ezt AWT alatt akarod, vagy standard inputrol? (Csak mert ez utobbi lehetetlen, AWT alatt nem nehez.)
A közelmúltban merült fel itt a fórumon az a probléma, hogy a JRE különböző verziói annyira eltérnek egymástól, hogy az már a bájtkód platformfüggetlenségét is veszélyezteti. Ezzel kapcsolatban eszembe jutott, hogy valamikor hallottam olyan bájtkód optimalizáló programról, amely a minimálisra csökkenti az egyetlen program által használt osztály(ok) számát, aminek az lesz az egyik következménye, hogy a JVM önmagában is elegendő lesz a futtatásához. A kérdésem az, hogy látott-e már valaki olyan technológiát, ami ilyen bájtkódot állít elő. (Vagy ennek hiányában hogyan képzelitek el a bájtkódot közvetlenül futtató processzorok működését?)
A másik az, hogy miként készíthető el a következő metódusok valamelyike:
static char redChar() {
// Visszaadja a leütött billentyűhöz tartozó karaktert.
}
static int redKey() {
// Visszaadja a leütött billentyűhöz tartozó unikódot.
}
public class Szavak {
/* A legutolsó szó */
StringBuffer szo = new StringBuffer();
/* A leghosszabb szó */
StringBuffer max = new StringBuffer();
/* A legrövidebb szó */
StringBuffer min = new StringBuffer();
/* A számjegyek száma a szavakban */
int numberOfDigits = 0;
/* A beütött karakter számjegy-e */
public boolean IsDigit(int ch) {
/* Ezt is lehet tömörebben írni */
if (ch>=(int) '0' && ch<=(int) '9'){
return true;
} else {
return false;
}
}
/* Az eredmény kiírása */
public void eredmeny() {
System.out.println("Leghossabb szó: "+max);
System.out.println("Legrövidebb szó: "+min);
System.out.println("Számjegyek száma: "+numberOfDigits);
}
/* Egy szó beolvasása */
public int read() {
/*
* Itt meghagytam a te eljárásodat
* (lényegében)
* 0 a visszatérési érték, ha nincs beolvasott szó
*/
szo.setLength(0);
int ch;
int n =0;
boolean done = false;
System.out.print("Kérek egy szót: ");
while (!done) {
try {
ch = System.in.read();
if (ch < 0 || (char) ch == '\n') {
done = true;
} else {
if ((char) ch != '\r') {
szo.append((char)ch) ;
n++;
if (IsDigit( ch)) numberOfDigits++ ;
};
}
} catch(java.io.IOException e) {
done = true;
}
}
if (n!=0) {
/* Ez itt nem elegáns
* lehet még rajta csiszolni
*/
if (max.length()==0 ){
max.append(szo);
min.append(szo);
};
if (szo.length()>max.length()){
max.setLength(0);
max.append(szo);
}
if (szo.length() min.setLength(0);
min.append(szo);
}
}
return n;
}
public static void main(String[] args) {
Szavak s = new Szavak();
while (s.read()!=0){
}
s.eredmeny();
}
}
Csak azt szeretném tudni, hogy meg lehtne-e írni ezt a kódot "tömörebben"? Tom, a string bekérés metódusai mehetnének egy package-be, de nem akarok semmi külső cuccot használni. (no import;))
public class Dolgozat{
public static void main(String[] args){
String szo, leghosszabb, legrovidebb;
int szamok=0;
szo=readLine("A szo: ");
leghosszabb=szo;
legrovidebb=szo;
while (szo.length()>0)
{
if (szo.length() if (szo.length()>leghosszabb.length()) leghosszabb=szo;
for (int i=0; i switch(szo.charAt(i)){
case '0': szamok++; break;
case '1': szamok++; break;
case '2': szamok++; break;
case '3': szamok++; break;
case '4': szamok++; break;
case '5': szamok++; break;
case '6': szamok++; break;
case '7': szamok++; break;
case '8': szamok++; break;
case '9': szamok++; break;
}
}
szo=readLine("A szo: ");
}
System.out.println("A legrovidebb szo: " + legrovidebb);
System.out.println(legrovidebb.length() + " karakterbol all.");
System.out.println("A leghosszabb szo: " + leghosszabb);
System.out.println(leghosszabb.length() + " karakterbol all.");
System.out.println("A szavakban talalhato szamok: " + szamok + " db.");
}
/* String beolvasása sor végéig */
public static String readLine() {
int ch;
String str = "";
boolean done = false;
while (!done) {
try {
ch = System.in.read();
if (ch < 0 || (char)ch == '\n')
done = true;
else if ((char)ch != '\r')
str += (char)ch;
}
catch(java.io.IOException e) {
done = true;
}
}
return str;
}
/* String beolvasása sor végéig, előtte prompt: */
public static String readLine(String str) {
System.out.print(str);
return readLine();
}
}
Egy resultset-ből. (a probléma már megoldódott... írtam egy saját HTML generálót, ami normálisan tud beágyazott táblákat csinálni. a probléma az, hogy ezt az Excel nem tudja normálisan megjeleníteni.)
Most persze kotozkodni fogok, mert a jsp forditassal en mar szivtam rendesen, ugyanis a servlet futtato (Weblogic, fene a belet :)) maskepp allitotta be a forditot, maskepp implementalta a dolgokat, igy hat a netbeans-szel forditott jsp-met finoman szolva is cs*szhettem. Persze, ez elsosorban a Weblogic hibaja.
Mindenesetre a jsp forditas nem feltetlenul hasznos tool es tobbnyire a servlet futtatok is (a Weblogic persze ismet kivetel :)) megfelelo forditasi hibauzenetekkel latnak el.
Masreszt viszont az eclipse is mukodik windows es linux alatt, viszont joval gyorsabb, mint a netbeans.
Szerintem erdemes vele megprobalkoznod, egyaltalan nem bonyolult, leszamitva a project letrehozast, de azon egyszer kell atragnod magad.
Ingyenes fejlesztoeszkoz temaban a figyelmetekbe ajanlom a NetBeans-t. Letoltheto: www.netbeans.org
En a munkamban ezt hasznalom, bar itt is a legtobben az Eclipse-re eskudnek, de nekem tul bonyolult volt a hasznalata. Tud nehany plusz dolgot az Eclipsehez kepest, peldaul tud JSP-forditani, ami hibakeresesnel jol johet. Javaban van irva, tehat minden platformra elerheto, amin Java fut, Windows, Linux, stb.
Nem tul komolynak tuno kerdesem van:
Van egy applet es egy szervlet, mindketto ertelemszeruen egy tomcat alatt.
Amikor a bongeszodbol kuldesz egy request-et, akkor az applet (a stop-metodusaban) megprobal egy ObjectOutputStream-en keresztul adatot (pl. String) kinyomni, amit aztan majd a szervlet egy objectinputstream-en keresztul beolvasna.
A szervlet tulajdonkeppen tudja is a dolgat, az applettel van gondom. Valamiert nem igazan irja ki a stream-re az adatokat, es exception-t sem dob. Viszont amikor kuldok gyorsan megegy requestet, akkor SocketException-t dob (nem tud irni), vagyis valamit megis probal.
Persze szamos pelda van a neten, de akkor sem akar mukodni a rohadekja. A tomcat.policy-ban a "(tomcat_home)/sajatdir/-" -re java.security.AllPermissiont-t raktam.
Kerdes, otlet van? :)
Az én gépemen az 1.4.1 eléggé kiakasztotta az XP-t. Állítólag nem nagyon komállta a videokártyát. Ati Mobil Radeon 7500. De az új driverekkel (szintén állítólag) már jól működik.
http://java.sun.com/j2se/1.4.1/download.html -> JRE sor, download.
De megvan itt is: http://www.mikland.hu/dl.php?f=Utils/Java/j2re-1_4_1-windows-i586.exe