Tartalomjegyzék
Java megoldások
- Szerző: Sallai András
- Copyright © 2011, Sallai András
- Szerkesztve: 2011-2023
- Licenc: 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:
- Prog01.java
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:
- Prog01.java
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<darab; i++) if(szamok[i] == szam) van = true; //Ha még nincs ilyen, akkor elteszem tömbbe if (!van) { szamok[darab] = szam; darab++; } }while(darab<5); //Csak 5-öt szeretnék System.out.print("Lottó számok: "); for (int i=0; i<5; i++) System.out.print(szamok[i] + " "); System.out.println(); } }
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
- jelszobe.java
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
- Program.java
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<kivonatByte.length; i++) System.out.print(Integer.toHexString(0xff & kivonatByte[i]));
StringBuffer hexString = new StringBuffer(); for (int i=0;i<mdbytes.length;i++) { String hex=Integer.toHexString(0xff & mdbytes[i]); if(hex.length()==1) hexString.append('0'); hexString.append(hex); } System.out.println("Kivonat(hex formában):: " + hexString.toString());
Egy állomány MD5 értékének ellenőrzése
- Program.java
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<mdbytes.length; i++) { String hex=Integer.toHexString(0xff & mdbytes[i]); if(hex.length()==1) hexString.append('0'); hexString.append(hex); } System.out.println("Kivonat hex formaban: " + hexString.toString()); } }
További algoritmusok
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
Külső program futtatása
- Program.java
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:
- Program.java
class Program { public static void main(String args[]) throws Exception { String[] cmd = {"beep", "-f", "4000"}; Runtime.getRuntime().exec("beep -f 4000").waitFor(); } }
- Program.java
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:
- App.java
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)); } }
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
- Program.java
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
- Program.java
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
- Program.java
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
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:
- Program.java
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:
- Program.java
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:
- Program.java
import java.util.Scanner; import java.util.Vector; class Program3 { static void szamok(Vector<Integer> 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<Integer> szamok = new Vector<Integer>(); 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
- Program01.java
class Program01 { public static void main(String[] args) { System.out.println(System.getProperty("os.name")); } }
Lehetséges válasz pl.:
- „Linux”
Rendszerparancsok futtatása
- Program01.java
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
- Program01.java
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<String> nevek = new Vector<String>(); 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.
- Program01.java
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); } } }
- Program01.java
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:
- Program01.java
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
- Program01.java
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()); } } }
- Program01.java
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
- Program01.java
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:
- Program01.java
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
Ékezetlenítés
- Program01.java
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é
- Program01.java
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:
- Program01.java
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
- Program01.java
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<b;i++){ tmp *= a; } return tmp; } public static int fact(int x){ int factor = 1; for(int i=0;i<x;i++){ factor *= i + 1; } return factor; } public static double sin(double x){ final int PRECISION = 5; double res = x; for(int i=1 ; i <= PRECISION; i++){ if(i % 2 == 0){ res += pow(x, 2* i+1) /fact(2 * i +1); }else{ res -= pow(x, 2*i+1) /fact(2 * i +1); } } return res; } public static double cos(double x){ final int PRECISION = 5; double res = 1; for(int i=1;i<=PRECISION;i++){ if(i % 2 == 0){ res += pow(x, 2* i) /fact(2 * i ); }else{ res -= pow(x, 2*i) /fact(2 * i); } } return res; } public static boolean isPrime(int x){ if(x<=1) return false; if(x==2) return true; for(int i=2; i<=x/2; i++){ if(x % i == 0) return false; } return true; } } class Program01 { public static void main(String[] args) { System.out.println(Math.cos(30 * 3.14 / 180)); System.out.println(Matek.cos(30 * 3.14 / 180)); System.out.println(Matek.fact(4)); } }
A sin() metódus kicsit másként
- Program01.java
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<b;i++){ tmp *= a; } return tmp; } public static int fact(int x){ int factor = 1; for(int i=0;i<x;i++){ factor *= i + 1; } return factor; } public static double sin(double x){ int n = 5; double res = 0; for(int i=0; i<n; i++){ res += (((pow(-1, i)) / fact(2*i+1)) * pow(x, 2*i+1)); } return res; } public static void main(String[] args) { System.out.println(sin(30*3.14/180)); System.out.printf("%f\n", sin(30*3.14/180)); } }
Maradékos osztás
Maradékos osztás, a prímtényezős felbontáshoz hasonlóan, a folyamat ábrázolásával.
- Program01.java
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
- Program01.java
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
- Program01.java
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
- Program01.java
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
- Program01.java
import java.util.ArrayList; import java.util.Arrays; class Program01 { static String lzw(String text, ArrayList<String> dic) { StringBuilder output= new StringBuilder(); String s = ""; for(int i= 0; i<text.length(); i++) { Character ch = text.charAt(i); if( dic.contains(s+ch.toString())) { s = s + ch.toString(); }else { output.append(dic.indexOf(s) + " "); dic.add(s + ch.toString()); s = ch.toString(); } } output.append(dic.indexOf(s)); return output.toString(); } public static void main(String[] args) { String[] dicArray = {"a", "b", "c"}; ArrayList<String> dic = new ArrayList<String>(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:
- Program01.java
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(); } }
- Nyomtatas.java
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
- Dolgozo.java
class Dolgozo { String nev; String telepules; String cim; String szuletes; double fizetes; }
- Program01.java
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<n; i++) { System.out.printf("%s %s %f\n", dolgozok[i].nev, dolgozok[i].telepules, dolgozok[i].fizetes ); } } public static void main(String[] args) throws FileNotFoundException { betolt(); kiir(); } }
ArrayList megoldás
- Dolgozo.java
class Dolgozo { String nev; String telepules; String cim; String szuletes; double fizetes; }
- Program01.java
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<Dolgozo> 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
- Dolgozo.java
class Dolgozo { String nev; String telepules; String cim; String szuletes; double fizetes; }
- Program01.java
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<Dolgozo> 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
- Program01.java
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<Dolgozo> 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(); } }