Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_megoldasok

Ez a dokumentum egy előző változata!


< Java

Java megoldások

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

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:

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

Program01.java
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<Integer> v = Arrays.asList(t);
 
		for(Integer a : v)
			System.out.println(a);		
	}
}

É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();
    }
}

Linkek

oktatas/programozas/java/java_megoldasok.1693289053.txt.gz · Utolsó módosítás: 2023/08/29 08:04 szerkesztette: admin