[[:oktatas:programozás:java|< Java]] ====== Java megoldások ====== * **Szerző:** Sallai András * Copyright (c) 2011, Sallai András * Szerkesztve: 2011-2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Bekérés console() metódussal ===== Egy ritkán használt megoldás a bekérésre a System osztály console() metódus használata: class Prog01 { public static void main(String[] args) { java.io.Console console = System.console(); String nev = console.readLine(); System.out.println("Név: " + nev); } } Láncolhatjuk is, egyetlen sorban: class Prog01 { public static void main(String[] args) { String nev = System.console().readLine(); System.out.println("Név: " + nev); } } ===== Üzenetablak ===== ==== Üzenetablak Swing csomagból ==== Az alábbiakhoz szükséges import sor: import javax.swing.*; JOptionPane.showMessageDialog(null, "Üzenet"); Ilyenkor az üzenetablak címsorába egy "Message" felirat kerül JOptionPane.showMessageDialog(null, "Üzenet", "címsor", JOptionPane.INFORMATION_MESSAGE); Az ablak típusa a következők egyike lehet: * QUESTION_MESSAGE * INFORMATION_MESSAGE * WARNING_MESSAGE * ERROR_MESSAGE ==== Metódust írunk belőle ==== public void Msg(String msg) { JOptionPane optionPane = new JOptionPane(); optionPane.setMessage(msg); optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE); JDialog dialog = optionPane.createDialog(this, "Üzenet"); dialog.setVisible(true); } ===== Beep ===== ==== ASCII bell karakter konzolra íratása ==== public class testBeep { public static void main(String args[]) { // ASCII bell System.out.print("\007"); System.out.flush(); } } ==== A JDK1.1-től beep metódus Toolkitban ==== import java.awt.*; public class beep { public static void main(String args[]) { Toolkit.getDefaultToolkit().beep(); } } ===== Időzítő ===== ==== Időzítés egyszeri alkalommal ==== import java.io.*; import java.util.Timer; import java.util.TimerTask; class idozitoap { Timer idozito; public idozitoap(int sec) { idozito = new Timer(); idozito.schedule(new TimerTask(){ public void run() { System.out.println("Időzített tevékenység indul ..."); idozito.cancel(); } }, sec * 1000 ); } public static void main(String args[]) throws IOException { System.out.println("Időzítő"); System.out.println("Időzítés előtt"); new idozitoap(5); System.out.println("Időzítés után"); System.in.read(); } } Ha periodikus futtatást szeretnénk megadni, akkor schedule() metódusnak meg kell mondani, harmadik paraméterként a periódusidőt. ===== Egy fájlban lévő ASCII karakterek megszámlálása ===== import java.io.*; class ap { public static void main(String[] argv) throws IOException { File fp = new File("adat.txt"); int szam = countASCIILetters(fp); System.out.println("Száma: " + szam); System.out.println("Folytatáshoz nyomjon Entert ..."); System.in.read(); } public static int countASCIILetters(File f) throws IOException { Reader r = new BufferedReader(new InputStreamReader( new FileInputStream(f), "US-ASCII")); try { int count = 0; int intch; while ((intch = r.read()) != -1) { int ch = (char) intch; if (Character.isLetter(ch)) { count++; } } return count; } finally { r.close(); } } } ===== Várakozás adott ideig ===== A Thread.sleep() metódus ténylegesen felfüggeszti az aktuális szálat a megadott ideig. Például üzeneteket jeleníthetünk meg időnként a segítségével. Nagyon fontos, hogy tudjuk a következőket: * Minidig az aktuális szál van megállítva. * Lehet, hogy a szál pont annyi időt alszik, amennyit megadtunk. * Egy rendszer mennyi ideig alszik egy egység alatt, ez rendszerenként változhat. Általában 1 ms. * Az alvó szál továbbra is szinkronizál a rendszerhez. * Az alvás megszakítható. * A sleep() rendszerhívás finomabb hatással lehet más szálakra, illetve más szálak is hatással lehet a kezelt szálra. A sleep() függvényt meghívhatjuk egy paraméterrel, ekkor megadjuk milliszekundumban a várakozási időt. Két paraméter is megadható, ekkor milliszekundumban és második paraméterként nano szekundumban adjuk meg várakozási időt. try { Thread.sleep(1000); }catch(InterruptedException e){ return; } // Várakozás kb. 2 másodpercig Thread.sleep(2000L); // várakozás kb. 2,5 másodpercig Thread.sleep(2000L, 500000L); try{ //amit szeretnénk várakozás előtt csinálni Thread.currentThread().sleep(1000);//várakozás: 1000 ms //amit szeretnénk várakozás után csinálni } catch(ItrerruptedException ie){ //ha szálat valami más okból kifolyólag megszakítjuk } ===== Lottó ===== import java.util.*; class lotto { public static void main(String args[]) { Random veletlen = new Random(); System.out.println("Lottó"); int[] szamok = new int[5]; int szam; boolean van = false; int darab = 0; do { //Dobok egy számot: szam = veletlen.nextInt(90) + 1; //Megnézem van, már ilyen: for (int i=0; i ===== Véletlenszerűen egy kép megjelenítése ablakon belül ===== import java.awt.*; import java.applet.Applet; public class ap extends Applet { Image kep; public void init() { kep = getImage(getDocumentBase(), "kep.png"); } public void paint(Graphics g) { int x = (int)(Math.random() * size().width); int y = (int)(Math.random() * size().height); g.drawImage(kep, x, y, this); } } ===== Jelszóbekérés ===== import java.util.Arrays; import java.io.Console; class Program { public static void main(String args[]) { Console konzol = System.console(); char[] jelszo = konzol.readPassword("Jelszó: "); //Jelszó ellenőrzés //Jelszóváltozó nullázása: Arrays.fill(jelszo, ' '); } } ===== MD5 kivonat készítése ===== import java.security.*; class Program { public static void main(String[] argv) throws Exception { String uzenet = "Üzi"; byte[] uzenetByte = uzenet.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] kivonatByte = md.digest(uzenetByte); System.out.println(kivonatByte.toString()); } } Esetleg latin2 byte[] uzenetByte = uzenet.getBytes("8859_2"); Legjobb hexadecimális formában tárolni: for(int i=0; i StringBuffer hexString = new StringBuffer(); for (int i=0;i Egy állomány MD5 értékének ellenőrzése import java.io.FileInputStream; import java.security.MessageDigest; class Program { public static void main(String[] args)throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream("fajlom.txt"); byte[] dataBytes = new byte[1024]; int nread = 0; while ((nread = fis.read(dataBytes)) != -1) { md.update(dataBytes, 0, nread); }; byte[] mdbytes = md.digest(); //byte to hex format StringBuffer hexString = new StringBuffer(); for (int i=0; i További algoritmusok * MD2 * MD5 * SHA-1 * SHA-256 * SHA-384 * SHA-512 ===== Külső program futtatása ===== class Program { public static void main(String args[]) throws Exception { Runtime.getRuntime().exec("beep -f 4000").waitFor(); } } A példában az alábbi parancsot futtatjuk: beep -f 4000 A parancs egyes részeit szétszedhetjük: class Program { public static void main(String args[]) throws Exception { String[] cmd = {"beep", "-f", "4000"}; Runtime.getRuntime().exec("beep -f 4000").waitFor(); } } import java.io.*; class Program { public static void main(String args[]) throws Exception { try { // Execute a command without arguments String command = "ls"; Process child = Runtime.getRuntime().exec(command); // Execute a command with an argument command = "ls /tmp"; child = Runtime.getRuntime().exec(command); }catch (IOException e){ } } } ===== Időzóna és Locale ===== Több nyelvű környezetben szükség lehet a nyelv és az aktuális időzóna beállítására: import java.util.*; class App { public static void main(String args[]) { Locale locale = new Locale("hu", "HU"); System.out.println(locale); TimeZone tz = TimeZone.getTimeZone("CET"); System.out.println(tz.getDisplayName(locale)); } } * http://www.herongyang.com/JDK/Locale-java-util-Local-Localization.html ===== Program befejezése ===== A main() program a Java nyelvben csak void-al térhet vissza, nem lehet int a visszatérési érték. Ha mégis szeretnénk beállítani a visszatérési értéket valami hibaszámra, akkor a System.exit(), metódust használhatjuk. A példa kedvéért térjünk vissza 12-es értékkel: System.exit(12); Ezek után vizsgáljuk meg a visszatérési értéket: Win: echo %errorlevel% Linux: echo $? ===== Egérkezelés ===== ==== Metódus összefoglaló ==== | void | mouseClicked(MouseEvent e) | Az egér lenyomása egy komponens felett. Pressed és released együtt. | | void | mouseEntered(MouseEvent e) | Az egér a komponens felé ér. | | void | mouseExited(MouseEvent e) | Az egér elhagyja a komponenst | | void | mousePressed(MouseEvent e) | Az egér lenyomásakor következik be | | void | mouseReleased(MouseEvent e) | Amikor az egérgomb elengedésre kerül | ==== Egérkezelés példa ==== import java.awt.event.*; import javax.swing.*; class Program extends JFrame implements MouseListener { Program() { addMouseListener(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { setTitle(Integer.toString(e.getX()) + " " + Integer.toString(e.getY())); } public static void main(String[] argv) { new Program(); } } ==== Egérkezelés komponensen ==== import java.awt.event.*; import javax.swing.*; class Program extends JFrame { JLabel cimke; Program() { cimke = new JLabel("valami"); cimke.setBounds(50, 50, 100, 30); cimke.addMouseListener(new CimkeEgerKezeles()); add(cimke); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } class CimkeEgerKezeles implements MouseListener { public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { setTitle(Integer.toString(e.getX()) + " " + Integer.toString(e.getY())); } } public static void main(String[] argv) { new Program(); } } ==== Egyéb metódusok ==== Melyik egérgomb lett lenyomva: int a = e.getButton(); Például dupla kattintás figyelése: int b = e.getClickCount(); ===== Görgős egér eseménye ===== import java.awt.event.*; import javax.swing.*; class Program extends JFrame { JLabel cimke; Program() { cimke = new JLabel("valami"); cimke.setBounds(50, 50, 100, 30); cimke.addMouseWheelListener(new CimkeEgerKezeles()); add(cimke); setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } class CimkeEgerKezeles implements MouseWheelListener { public void mouseWheelMoved(MouseWheelEvent e) { int a = e.getWheelRotation(); setTitle(Integer.toString(a)); } } public static void main(String[] argv) { new Program(); } } ===== Saját szín definiálása ===== Color szin = new Color(0,0,255); ===== Rekurzió ===== Rekurzióról akkor beszélhetünk, ha egy metódus önmagát hívja. A metódus így ciklikusan újra és újra végrehajtja önmagát. Ilyenkor ügyelnünk kell arra, hogy gondoskodjunk a rekurzió megszakításáról. Az alábbi példában a nevünket és a rekurzióban részvevő ciklusváltozó értékét íratjuk ki tízszer: class Program { static void ki(int i) { System.out.println(i + " Joe"); if(i>0) ki(i-1); } public static void main(String args[]) { ki(9); } } Vegyük észre, hogy a metódusban a rekurzió meghívását egy if() feltételhez kötöttük. Vagy kérjünk be számokat nulla végjelig rekurzívan: import java.util.Scanner; class Program { static void szamok() { Scanner input = new Scanner(System.in); System.out.print("Szam: "); int szam = input.nextInt(); input = null; if(szam != 0) szamok(); } public static void main(String args[]) { szamok(); } } A következő példában megint számokat kérünk be 0 végjelig, de most eltároljuk egy vektorban: import java.util.Scanner; import java.util.Vector; class Program3 { static void szamok(Vector szamok) { Scanner input = new Scanner(System.in); System.out.print("Szam: "); int szam = input.nextInt(); input = null; if(szam != 0) { szamok.add(szam); szamok(szamok); } } public static void main(String args[]) { Vector szamok = new Vector(); szamok(szamok); for(Integer szam : szamok) System.out.print(szam + " "); System.out.println(); } } ===== Rendszer információk lekérdezése ===== ==== Operációs rendszer nevének lekérdezése ==== class Program01 { public static void main(String[] args) { System.out.println(System.getProperty("os.name")); } } Lehetséges válasz pl.: * "Linux" ===== Rendszerparancsok futtatása ===== import java.io.*; public class Program01 { public static void main(String args[]) { String s = null; try { Process p = Runtime.getRuntime().exec("ls"); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); // kimenet olvasása: System.out.println("A alapértelmezett kimenet:\n"); while ((s = stdInput.readLine()) != null) { System.out.println(s); } // hibakimenet olvasása: System.out.println("Az alapértelmezett kimenet:\n"); while ((s = stdError.readLine()) != null) { System.out.println(s); } System.exit(0); }catch (IOException e){ System.out.println("Hiba történt - Oka: "); e.printStackTrace(); System.exit(-1); } } } ===== Rendezés ===== import java.util.Vector; import java.text.Collator; import java.util.Collections; import java.util.Locale; class Program01 { public static void main(String args[]) { Vector nevek = new Vector(); nevek.add("Péter"); nevek.add("Andrea"); nevek.add("Pál"); nevek.add("Árpád"); nevek.add("Zoltán"); Collator collator = Collator.getInstance(new Locale("hu")); Collections.sort(nevek, collator); for(String s : nevek) System.out.println(s); } } ===== Scanner osztály ===== A Scanner osztályt a Java nyelv fejezetben csak arra használtuk, hogy a billentyűzetről és fájlokból olvassunk adatokat. Az alábbiakban sztringeket szkennelünk vele. import java.util.Scanner; //Parse String public class Program01 { public static void main(String[] args) { Scanner scanner = new Scanner("1, 2, 3, 4, 5, 6, 7, 8, 9, 10").useDelimiter(", "); while (scanner.hasNextInt()) { int num = scanner.nextInt(); if (num % 2 == 0) System.out.println(num); } } } import java.util.Scanner; //Parse String class Program01 { public static void main(String[] args) { Scanner scanner = new Scanner("1 2 3 4 5 6 7 8 9 10"); while (scanner.hasNextInt()) { int num = scanner.nextInt(); if (num % 2 == 0) System.out.println(num); } } } String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); Delimiter megadása: import java.util.Scanner; import java.util.regex.Pattern; class Program01 { public static void main(String[] args) { String s = "8 2,5 9 3 7 120"; Scanner in = new Scanner(s); //~ Delimiter megadása mintával: in.useDelimiter(Pattern.compile("( |,)")); while(in.hasNext()) { int a = in.nextInt(); System.out.println(a); } } } ===== Fájlmásolás ===== class Program01 { public static void main(String[] args) { System.out.println("Fájlmásolás"); CopyFile.copyFile("egyik.txt", "masik.txt"); } } class CopyFile { public static void copyFile(String srcFile, String desFile) { try { java.io.File f1 = new java.io.File(srcFile); java.io.File f2 = new java.io.File(desFile); java.io.InputStream in = new java.io.FileInputStream(f1); java.io.OutputStream out = new java.io.FileOutputStream(f2); byte[] buf = new byte[1024]; int len; while((len = in.read(buf))>0) { out.write(buf, 0, len); } in.close(); out.close(); System.out.println("A fájl másolása kész"); }catch(java.io.FileNotFoundException e){ System.err.println("A fájl nem található"); System.err.println(e.getMessage()); System.exit(0); }catch(java.io.IOException e){ System.err.println("Ki/beviteli hiba"); System.err.println(e.getMessage()); } } } import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; class Program01 { public static void main(String[] args) throws IOException { CopyFile.copyFile("eredeti.txt", "masolat2.txt"); } } class CopyFile { public static void copyFile(String srcFile, String desFile) { java.io.File inFile = new java.io.File(srcFile); java.io.File outFile = new java.io.File(desFile); FileReader in = null; FileWriter out = null; try { in = new FileReader(inFile); }catch(java.io.FileNotFoundException e){ System.err.println("A fájl nem található!"); System.exit(0); } try { out = new FileWriter(outFile); int c; while ((c = in.read()) != -1) out.write(c); System.out.println("Másolás kész."); } catch(java.io.IOException e) { System.err.println("Ki- beviteli hiba!"); } finally { try { in.close(); out.close(); }catch(java.io.IOException e){} } } } ==== FileWriter és FileReader ==== class FileUtils { public static void copyFile(String src, String dst) { java.io.File inputFile = new java.io.File(src); java.io.File outputFile = new java.io.File(dst); java.io.FileReader in = null; java.io.FileWriter out = null; try { in = new java.io.FileReader(inputFile); out = new java.io.FileWriter(outputFile); int c; while ((c = in.read()) != -1) out.write(c); }catch(java.io.FileNotFoundException e){ System.err.println("A fájl nem található!"); }catch(java.io.IOException e){ System.err.println("Hiba a fájlkezelés során!"); }finally{ try { in.close(); out.close(); }catch(java.io.IOException e){} } } } class Program01 { public static void main(String[] args) { FileUtils.copyFile("/home/joska/vmi.txt", "/home/joska/vmi3.txt"); } } ==== FileChannel ==== Gyorsabb másolási lehetőség: class FileUtils { public static void copyFile(String src, String dst) { java.io.File fsrc = new java.io.File(src); java.io.File fdst = new java.io.File(dst); java.nio.channels.FileChannel inChan = null; java.nio.channels.FileChannel outChan = null; try { inChan = new java.io.FileInputStream(fsrc).getChannel(); outChan = new java.io.FileOutputStream(fdst).getChannel(); inChan.transferTo(0, inChan.size(), outChan); }catch(java.io.FileNotFoundException e){ System.err.println("A fájl nem található!"); }catch(java.io.IOException e){ System.err.println("Hiba a fájl másolása során!"); }finally{ try{ if(inChan != null) inChan.close(); if(outChan != null) outChan.close(); }catch(java.io.IOException e){} } } } class Program01 { public static void main(String[] args) { FileUtils.copyFile("vmi.txt", "vmi2.txt"); System.out.println("Másolás kész."); } } ===== HTML oldal megnyitása ===== String url = "http://szit.hu"; if (java.awt.Desktop.isDesktopSupported()) { java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); if(desktop.isSupported(java.awt.Desktop.Action.BROWSE)) { try { java.net.URI uri = new java.net.URI(url); desktop.browse(uri); }catch (Exception e){ System.err.println("Hiba a megnyitás során"); } }else { System.out.println("Böngésző nem támogatott"); } } ===== Lista tömbből ===== import java.util.List; import java.util.Arrays; class Program01 { public static void main(String args[]) { Integer[] t = {45, 37, 29, 82, 34, 56}; List v = Arrays.asList(t); for(Integer a : v) System.out.println(a); } } ===== Ékezetlenítés ===== import java.text.Normalizer; import java.text.Normalizer.Form; class Program01 { public static void main(String args[]) { String s = "ékezetes betűk"; String s2 = Normalizer.normalize(s, Form.NFD) .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); System.out.println(s2); } } ===== Sztring karaktertömbbé ===== class Program01 { public static void main(String args[]) { String s = "alma"; char[] t = new char[s.length()]; t = s.toCharArray(); for(char ch : t) System.out.println(ch); } } ===== Előjel ===== Megoldás if helyett: class Program01 { public static void main(String args[]) { System.out.println(elojel(0)); } private static String elojel(int a) { return a == 0 ? "Nulla" : a < 0 ? "Negatív" : "Pozitív"; } } ===== A Math osztály részben megvalósítása ===== ==== Több matematikai függvény megvalósítása ==== class Matek{ private Matek(){} public static double abs(double x){ if(x>=0) return x; else return x * -1; } public static float abs(float x){ if(x>=0) return x; else return x * -1; } public static int abs(int x){ if(x>=0) return x; else return x * -1; } public static long abs(long x){ if(x>=0) return x; else return x * -1; } public static double ceil3(double x){ if((x - (long)x)>0){ return (double)(long)x+1; }else{ return (double)(long)x; } } public static long round(double x){ if(x>0) return (long) (x + 0.5); if(x<0) return (long) (x - 0.5); return 0; } public static double floor(double x){ if(x<0){ if((double)(long)x ==x){ return (long)x; }else{ return (long)x-1; } }else{ return (long)x; } } public static double pow(double a, double b){ if(b == 0){ return 1; } if(b==1){ return a; } double tmp=1; for(int i=0;i ==== A sin() metódus kicsit másként ==== class Program01 { public static double pow(double a, double b){ if(b == 0){ return 1; } if(b==1){ return a; } double tmp=1; for(int i=0;i ===== Maradékos osztás ===== Maradékos osztás, a prímtényezős felbontáshoz hasonlóan, a folyamat ábrázolásával. import java.util.Scanner; class Program01 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Maradékos osztás a prímtényezős felbontáshoz hasonlóan."); System.out.println("Egy decimális szám konvertálása adott számrendszerre."); System.out.print("Szám: "); double szam = in.nextDouble(); System.out.print("A számrendszer alapja: "); int alap = in.nextInt(); do{ int hanyados = (int) szam / alap; int maradek = (int) szam % alap; System.out.printf("%10.0f|%d\n", szam, maradek); szam = hanyados; }while(szam > 0); } } Alakítsuk úgy át a programot, hogy a végén írjuk ki a kapott számot. ===== Háromszög terület ===== import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.BoxLayout; import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; class Program01 extends JFrame { JPanel topPanel = new JPanel(); JPanel bottomPanel = new JPanel(); JLabel taskLabel = new JLabel("Háromszög területszámítás"); JLabel baseLabel = new JLabel("Alap"); JLabel heightLabel = new JLabel("Magasság"); JLabel resultLabel = new JLabel("Eredmény"); JTextField baseField = new JTextField(10); JTextField heightField = new JTextField(10); JTextField resultField = new JTextField(10); JButton calcButton = new JButton("Számít"); Program01() { calcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { calcButtonActionListener(event); } }); resultLabel.setVisible(false); resultField.setVisible(false); topPanel.add(taskLabel); bottomPanel.setLayout(new FlowLayout()); bottomPanel.add(baseLabel); bottomPanel.add(baseField); bottomPanel.add(heightLabel); bottomPanel.add(heightField); bottomPanel.add(resultLabel); bottomPanel.add(resultField); bottomPanel.add(calcButton); setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); add(topPanel); add(bottomPanel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); centerWindow(this); setVisible(true); } public void calcButtonActionListener(ActionEvent event) { String baseStr = baseField.getText(); String heightStr = heightField.getText(); double base = Double.parseDouble(baseStr); double height = Double.parseDouble(heightStr); Double result = calcArea(base, height); resultField.setText(result.toString()); resultLabel.setVisible(true); resultField.setVisible(true); pack(); } public double calcArea(double base, double height) { if(base<=0 || height<=0) { throw new IllegalArgumentException(); } return (base * height) / 2.0; } public static void centerWindow(java.awt.Window frame) { java.awt.Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); int x = (int)((dimension.getWidth() - frame.getWidth()) / 2); int y = (int)((dimension.getHeight() - frame.getHeight()) / 2); frame.setLocation(x, y); } public static void main(String[]args) { new Program01(); } } ===== Fa bejárása rekurzívan ===== class Elem { char adat; Elem bal; Elem jobb; } class Program01 { static void preorder(Elem elem) { if(elem != null) { System.out.printf("%c ", elem.adat); preorder(elem.bal); preorder(elem.jobb); } } static void inorder(Elem elem) { if(elem != null) { inorder(elem.bal); System.out.printf("%c ", elem.adat); inorder(elem.jobb); } } static void postorder(Elem elem) { if(elem != null) { postorder(elem.bal); postorder(elem.jobb); System.out.printf("%c ", elem.adat); } } static void feltolt(Elem fa) { Elem gyoker = fa; Elem elem2 = new Elem(); Elem elem3 = new Elem(); Elem elem4 = new Elem(); Elem elem5 = new Elem(); Elem elem6 = new Elem(); gyoker.adat = 'a'; gyoker.bal = elem2; gyoker.jobb = elem5; elem2.adat = 'l'; elem2.bal = elem3; elem2.jobb = elem4; elem3.adat = 'm'; elem3.bal = null; elem3.jobb = null; elem4.adat = 'a'; elem4.bal = null; elem4.jobb = null; elem5.adat = 'f'; elem5.bal = null; elem5.jobb = elem6; elem6.adat = 'a'; elem6.bal = null; elem6.jobb = null; } public static void main(String[] args) { Elem fa = new Elem(); feltolt(fa); preorder(fa); System.out.println(); inorder(fa); System.out.println(); postorder(fa); System.out.println(); } } ===== Fordított háromszög rajzoltatás ===== class Program01 { static void piramisForditva() { for(int i=0;i<5; i++) { for(int j=0; j<9; j++) { if(j>=i && j<(9-i)) { System.out.print("@ "); }else { System.out.print(" "); } } System.out.println(); } } public static void main(String[] args) { piramisForditva(); } } ===== LZW kódolás ===== import java.util.ArrayList; import java.util.Arrays; class Program01 { static String lzw(String text, ArrayList dic) { StringBuilder output= new StringBuilder(); String s = ""; for(int i= 0; i dic = new ArrayList(Arrays.asList(dicArray)); System.out.println(lzw("abbababac", dic)); } } ===== Nyomtatás ===== Az alábbi példában egy táblázat nyomtatását látjuk: import javax.swing.*; import java.awt.event.*; class Program01 extends JFrame { JTable tabla; JButton gomb; final static long serialVersionUID = 1; Program01() { String[] mezoNevek = {"id", "Név", "Település", "Kor"}; Object[][] adat = { {1, "Nagy Peter", "Szolnok", 67}, {2, "Nagy Lajos", "Szolnok", 27} }; tabla = new JTable(adat, mezoNevek); tabla.setBounds(10, 10, 300, 200); gomb = new JButton("Nyomtat"); gomb.setBounds(10, 220, 100, 30); gomb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GombActionListener(); } }); setLayout(null); add(tabla); add(gomb); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } public void GombActionListener() { Nyomtatas nyomtatas = new Nyomtatas(); nyomtatas.setComponent(tabla); nyomtatas.print(); } public static void main(String[] argv) { new Program01(); } } import java.awt.print.Printable; import java.awt.print.PageFormat; import java.awt.print.PrinterJob; import java.awt.print.PrinterException; import javax.swing.RepaintManager; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Component; class Nyomtatas implements Printable { private Component component; public void setComponent(Component component) { this.component = component; } public void print() { try { tryPrint(); } catch(PrinterException e) { System.err.println("Hiba a nyomtatás során!"); } } public void tryPrint() throws PrinterException { PrinterJob printerJob = PrinterJob.getPrinterJob(); printerJob.setPrintable(this); boolean enablePrint = printerJob.printDialog(); if (enablePrint) { printerJob.print(); } } public int print(Graphics g, PageFormat pageFormat, int page) { if (page > 0) { return(NO_SUCH_PAGE); }else { Graphics2D g2d = (Graphics2D)g; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); disableDoubleBuffering(this.component); this.component.paint(g2d); enableDoubleBuffering(this.component); return(PAGE_EXISTS); } } public static void enableDoubleBuffering(Component component) { RepaintManager repaintManager = RepaintManager.currentManager(component); repaintManager.setDoubleBufferingEnabled(true); } public static void disableDoubleBuffering(Component component) { RepaintManager repaintManager = RepaintManager.currentManager(component); repaintManager.setDoubleBufferingEnabled(false); } } ===== Darabolás ===== ==== Tömb megoldás ==== class Dolgozo { String nev; String telepules; String cim; String szuletes; double fizetes; } import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.io.IOException; import java.io.FileWriter; import java.io.PrintWriter; class Program01 { static Dolgozo[] dolgozok = new Dolgozo[100]; static int n = 0; public static void betolt() throws FileNotFoundException { File input = new File("filbt.txt"); Scanner sc = new Scanner(input); int count = 0; while(sc.hasNextLine()) { String line = sc.nextLine(); Scanner lineSc = new Scanner(line); lineSc.useDelimiter(":"); Dolgozo dolgozo = new Dolgozo(); if(lineSc.hasNext()) { dolgozo.nev = lineSc.next(); dolgozo.telepules = lineSc.next(); dolgozo.cim = lineSc.next(); dolgozo.szuletes = lineSc.next(); dolgozo.fizetes = lineSc.nextDouble(); } dolgozok[count] = dolgozo; count++; } n = count; } public static void kiir() { for(int i=0;i ==== ArrayList megoldás ==== class Dolgozo { String nev; String telepules; String cim; String szuletes; double fizetes; } import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.io.IOException; import java.io.FileWriter; import java.io.PrintWriter; import java.util.ArrayList; class Program01 { static ArrayList dolgozok = new ArrayList<>(); public static void betolt() throws FileNotFoundException { File input = new File("filbt.txt"); Scanner sc = new Scanner(input); int count = 0; while(sc.hasNextLine()) { String line = sc.nextLine(); Scanner lineSc = new Scanner(line); lineSc.useDelimiter(":"); Dolgozo dolgozo = new Dolgozo(); if(lineSc.hasNext()) { dolgozo.nev = lineSc.next(); dolgozo.telepules = lineSc.next(); dolgozo.cim = lineSc.next(); dolgozo.szuletes = lineSc.next(); dolgozo.fizetes = lineSc.nextDouble(); } dolgozok.add(dolgozo); } } public static void kiir() { for(Dolgozo dolgozo: dolgozok) { System.out.printf("%s %s %f\n", dolgozo.nev, dolgozo.telepules, dolgozo.fizetes ); } } public static void main(String[] args) throws FileNotFoundException { betolt(); kiir(); } } ==== ArrayList és try..catch ==== class Dolgozo { String nev; String telepules; String cim; String szuletes; double fizetes; } import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.io.IOException; import java.io.FileWriter; import java.io.PrintWriter; import java.util.ArrayList; class Program01 { static ArrayList dolgozok = new ArrayList<>(); public static void probaBetolt() throws FileNotFoundException { File input = new File("filbt.txt"); Scanner sc = new Scanner(input); int count = 0; while(sc.hasNextLine()) { String line = sc.nextLine(); Scanner lineSc = new Scanner(line); lineSc.useDelimiter(":"); Dolgozo dolgozo = new Dolgozo(); if(lineSc.hasNext()) { dolgozo.nev = lineSc.next(); dolgozo.telepules = lineSc.next(); dolgozo.cim = lineSc.next(); dolgozo.szuletes = lineSc.next(); dolgozo.fizetes = lineSc.nextDouble(); } dolgozok.add(dolgozo); } } public static void betolt() { try { probaBetolt(); }catch(FileNotFoundException ex) { System.err.println("Hiba! A fájl nem található!"); } } public static void kiir() { for(Dolgozo dolgozo: dolgozok) { System.out.printf("%s %s %f\n", dolgozo.nev, dolgozo.telepules, dolgozo.fizetes ); } } public static void main(String[] args){ betolt(); kiir(); } } ===== A szép lambda kifejezés ===== import java.util.ArrayList; class Dolgozo { String nev; String tel; double fiz; public Dolgozo(String nev, String tel, double fiz) { this.nev = nev; this.tel = tel; this.fiz = fiz; } } public class Program01 { ArrayList dolgozok = new ArrayList<>(); public void feltolt() { dolgozok.add(new Dolgozo("Nagy János", "Szolnok", 2850000)); dolgozok.add(new Dolgozo("Para Béla", "Szeged", 2340000)); dolgozok.add(new Dolgozo("Csank Lili", "Szolnok", 2210000)); } public void keresLambda() { if (dolgozok.stream().map(x -> x.nev) .anyMatch(x -> x.equals("Nagy János"))) { System.out.println("Van Ngy János"); } else { System.out.println("Nincs Ngy János"); } } public void keresForeach() { boolean van = false; for (Dolgozo dolgozo : dolgozok) if (dolgozo.nev.equals("Nagy János")) van = true; if (van) System.out.println("Van Ngy János"); else System.out.println("Nincs Ngy János"); } public static void main(String[] args) { Program01 prg = new Program01(); prg.feltolt(); prg.keresLambda(); prg.keresForeach(); } } ===== Linkek ===== * http://www.javamex.com/tutorials/threads/sleep.shtml (sleep()) * http://www.javamex.com/tutorials/threads/ (Szálak)