[[: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)