2018. november 4., vasárnap

Jáva programozás 10B

Az adatbekérés billentyűről

direkt erre a feladattípusra készített osztály, a Scanner osztály

Mivel ez a Scanner egy előre megírt osztály, a program elkészítésének első lépése importálni

Még a program osztályainak megadása előtt: import java.util.Scanner;
Ha ez megvan, ettől a ponttól kezdve deklarálhatunk Scanner típusú változót,

és létrehozhatunk belőle egy Scanner objektumot

Nézzünk példákat



 Konzolról bekért szám kiírása a képernyőre



package io1;
/**
 * @Pelda orai
 */
import java.util.Scanner;

public class io1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Kérek egy egész számot!");
        int a = sc.nextInt();
        System.out.println("A beolvasott szám: " + a);
    }
}



 Vagy legyen a kétszerese





import java.util.Scanner;



public class Adatbekeres

{

  public static void main( String[] args )

  {

    Scanner sc;



    sc = new Scanner(System.in);



    int szam;

    szam = sc.nextInt();



    sc.close();



    System.out.println("A bekert szam ketszerese: "+szam*2);

  }

}






    A kód elején a Scanner osztály importálásával kezdünk, mert enélkül nem tudjuk használni. Ha már használhatjuk, akkor létre kell hoznunk egy Scanner objektumot, ami majd az adatbekérést fogja végrehajtani. Ez történik meg a 7. sorban.
    A létrehozott Scanner objektumunkat egy sc nevű változóban fogjuk tárolni, így bármikor egyszerűen elérhetjük. Természetesen más nevet is megadhatunk neki, de lustaságból én nem adok meg hosszabb nevet, minek annyit gépelni A Scanner osztálynak meghívjuk a konstruktorát, és odaadjuk neki a System.in bemenetet, ami alapértelmezetten a billentyűzet. Ettől kezdve az objektumunk a billentyűzetről fogja beolvasni az általunk megadott adatokat. A Scanner objektumnak meghívjuk a nextInt() metódusát, amely a begépelt és Enter billentyűvel lezárt adatbevitel esetén a begépelt számot azonnal eltárolja egy int típusú változóba. Lezárjuk a Scanner-t, miután már nincs rá szükségünk.



Több féle tipust is bekérhetünk


    String s = sc.nextLine();
    float f = sc.nextFloat();
    double d = sc.nextDouble();
    byte b = sc.nextByte();
    long l = sc.nextLong();



 Töltsünk fel egy 3x3 mátrixot véletlen számokkal és írassuk ki őket mátrix fromában a képernyőre.

static void Main(string[] args)

{

int[,] tm = new int[3,3];

int i, j ;

Random rnd = new Random();

for (i = 0; i < 3; i++)

{

for (j = 0; j < 3; j++)

{

tm[i,j] = rnd.Next(10,20);

Console.Write("{0} ",tm[i,j]);

}

Console.WriteLine();

}

Console.ReadLine();

}







http://www.petrik.hu/files/tamop/SZINFO13/SZINFO13_NYOMDA/SZINFO13_TJ/SZINFO13_TJ.pdf



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



Kérjkünk be számokat amíg nem lesz 0 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<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();
     }
    }

    

     Lista egy tömb tartalmáról 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);      

            }

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









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







 Tömb tartalmának kiírása képernyőre



public class ForDemo {
    public static void main(String[] args) {
        int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };

        for (int i = 0; i < arrayOfInts.length; i++) {
            System.out.print(arrayOfInts[i] + " ");
        }
        System.out.println();
    }
}

Vezérlési szerkezetek


https://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:java:java_megold%C3%A1sok&s[]=scanner

Ciklus tipusokra példa

Elől tesztelő ciklus

A while ciklus utasításblokk végrehajtására használható, amíg a feltétel igaz. A while ciklus szintaxisa:

while (feltétel) {
    utasítások
}

A while ciklus először kiértékeli a feltételt, amely művelet egy boolean értéket ad vissza. Ha a kifejezés értéke igaz, a while ciklus végrehajtja while blokkjában szereplő utasításokat. A while ciklus addig értékeli ki a kifejezést és hajtja végre az utasításblokkot, amíg a kifejezés hamis értékű nem lesz.

A következő WhileDemo nevű példaprogram a while ciklust használja fel, amely megvizsgálja a sztring karaktereit, hozzáfűzi a sztring minden karakterét a sztring puffer végéhez, amíg ’g’ betűvel nem találkozik.

public class WhileDemo {
    public static void main(String[] args) {

        String copyFromMe = "Copy this string until you " +
                            "encounter the letter 'g'.";
        StringBuffer copyToMe = new StringBuffer();

        int i = 0;
        char c = copyFromMe.charAt(i);

        while (c != 'g') {
            copyToMe.append(c);
            c = copyFromMe.charAt(++i);
        }
        System.out.println(copyToMe);
    }
}

Az érték, amelyet az utolsó sor ír ki:

Copy this strin
Hátul tesztelő ciklus

A Java nyelv egy a while ciklushoz hasonló utasítást is biztosít — a do-while ciklust. A do-while szintaxisa:

do {
    utasítás(ok)
} while (feltétel);

Ahelyett, hogy a feltételt a ciklus végrehajtása előtt értékelné ki, a do-while ezt a ciklusmag lefutása után teszi meg. Így a do-while magjában szereplő utasítások minimum egyszer végrehajtódnak.

Itt látható az előző program do-while ciklussal megvalósítva, ami a DoWhileDemo nevet kapta:

public class DoWhileDemo {
    public static void main(String[] args) {

        String copyFromMe = "Copy this string until you " +
                            "encounter the letter 'g'.";
        StringBuffer copyToMe = new StringBuffer();

        int i = 0;
        char c = copyFromMe.charAt(i);

        do {
            copyToMe.append(c);
            c = copyFromMe.charAt(++i);
        } while (c != 'g');
        System.out.println(scopyToMe);
    }
}


For ciklus

A for utasítás jó módszer egy értéktartomány bejárására. A for utasításnak van egy hagyományos formája, és a Java 5.0-tól kezdődően egy továbbfejlesztett formája is, amit tömbökön és gyűjteményeken való egyszerű bejárásnál használhatunk. A for utasítás általános formája a következőképpen néz ki:

for (inicializálás; feltétel; növekmény) {
    utastás(ok)
}

Az inicializálás egy olyan kifejezés, amely kezdőértéket ad a ciklusnak – ez egyszer, a ciklus elején fut le. A feltétel kifejezés azt határozza meg, hogy meddig kell a ciklust ismételni. Amikor a kifejezés hamisként értékelődik ki, a ciklus nem folytatódik. Végezetül a növekmény egy olyan kifejezés, amely minden ismétlődés után végrehajtódik a ciklusban. Mindezen összetevők opcionálisak. Tulajdonképpen ahhoz, hogy egy végtelen ciklust írjunk, elhagyjuk mindhárom kifejezést:

for ( ; ; ) {
    ...
}

A for ciklusokat gyakran arra használjuk, hogy egy tömb elemein vagy egy karakterláncon végezzünk iterációt. Az alábbi példa, ForDemo, egy for utasítást használ arra, hogy végighaladjon egy tömb elemein és kiírja őket.

public class ForDemo {
    public static void main(String[] args) {
        int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };

        for (int i = 0; i < arrayOfInts.length; i++) {
            System.out.print(arrayOfInts[i] + " ");
        }
        System.out.println();
    }
}

If else

Az if utasítás lehetővé teszi a programunk számára, hogy valamilyen kritérium szerint kiválasztva futtasson más utasításokat. Például tegyük fel azt, hogy a programunk hibakereső (debugging) információkat ír ki egy DEBUG nevű, boolean típusú változó értéke alapján. Ha a DEBUG igaz, a program kiírja az információt, az x változó értékét. Különben a program futása normálisan folytatódik. Egy ilyen feladatot implementáló programrész a következőképpen nézhet ki:

if (DEBUG) {
    System.out.println("DEBUG: x = " + x);
}

Ez az if utasítás legegyszerűbb formája. Az if által vezérelt blokk végrehajtódik, ha a feltétel igaz. Általában az if egyszerű alakja így néz ki:

if (feltétel) {
    kifejezések
}

Mi van akkor, ha az utasítások más változatát akarjuk futtatni, ha a feltétel kifejezés hamis? Erre az else utasítást használhatjuk. Vegyünk egy másik példát. Tegyük fel azt, hogy a programunknak különböző műveleteket kell végrehajtania attól függően, hogy a felhasználó az OK gombot vagy más gombot nyom meg a figyelmeztető ablakban. A programunk képes lehet erre, ha egy if utasítást egy else utasítással együtt használunk.

if (response == OK) {
    //code to perform OK action
} else {
    //code to perform Cancel action
}

Az else blokk akkor kerül végrehajtásra, ha az if feltétele hamis. Az else utasítás egy másik formája az else if egy másik feltételen alapulva futtat egy utasítást. Egy if utasításnak lehet akárhány else if ága, de else csak egy. Az alábbi IfElseDemo program egy teszt pontszámot alapul véve egy osztályzatot határoz meg: 5-ös 90%-ért vagy afölött, 4-es 80%-ért vagy afölött és így tovább:

public class IfElseDemo {
    public static void main(String[] args) {
        int testscore = 76;
        int grade;
        if (testscore >= 90) {
            grade = 5;
        } else if (testscore >= 80) {
            grade = 4;
        } else if (testscore >= 70) {
            grade = 3;
        } else if (testscore >= 60) {
            grade = 2;
        } else {
            grade = 1;
        }
        System.out.println("Grade = " + grade);
    }
}

Switch alkalmazása

Akkor használhatjuk a switch utasítást, ha egy egész szám értéke alapján akarunk végrehajtani utasításokat. A következő SwitchDemo példaprogram egy month nevű egész típusú változót deklarál, melynek értéke vélhetőleg a hónapot reprezentálja egy dátumban. A program a switch utasítás használatával a hónap nevét jeleníti meg a month értéke alapján.

public class SwitchDemo {
    public static void main(String[] args) {
        int month = 8;
        switch (month) {
            case 1:  System.out.println("January"); break;
            case 2:  System.out.println("February"); break;
            case 3:  System.out.println("March"); break;
            case 4:  System.out.println("April"); break;
            case 5:  System.out.println("May"); break;
            case 6:  System.out.println("June"); break;
            case 7:  System.out.println("July"); break;
            case 8:  System.out.println("August"); break;
            case 9:  System.out.println("September"); break;
            case 10: System.out.println("October"); break;
            case 11: System.out.println("November"); break;
            case 12: System.out.println("December"); break;
            default: System.out.println("Not a month!");
                    break;
        }
    }
}

A switch utasítás kiértékeli kifejezést, ez esetben a month értékét, és lefuttatja a megfelelő case utasítást. Ezáltal a program futási eredménye az August lesz. Természetesen ezt az if utasítás felhasználásával is megoldhatjuk:

int month = 8;
if (month == 1) {
    System.out.println("January");
} else if (month == 2) {
    System.out.println("February");
}
...

Annak eldöntése, hogy az if vagy a switch utasítást használjuk, programozói stílus kérdése. Megbízhatósági és más tényezők figyelembevételével eldönthetjük, melyiket használjuk. Míg egy if utasítást használhatunk arra, hogy egy értékkészlet vagy egy feltétel alapján hozzunk döntéseket, addig a switch utasítás egy egész szám értéke alapján hoz döntést. Másrészt minden case értéknek egyedinek kell lennie, és a vizsgált értékek csak konstansok lehetnek.

Egy másik érdekesség a switch utasításban a minden case utáni break utasítás. Minden egyes break utasítás megszakítja az épp bezáródó switch utasítást, és a vezérlés szála a switch blokk utáni első utasításhoz kerül. A break utasítások szükségesek, mivel nélkülük a case utasítások értelmüket vesztenék. Vagyis egy explicit break nélkül a vezérlés folytatólagosan a rákövetkező case utasításra kerül (átcsorog). Az alábbi SwitchDemo2 példa azt illusztrálja, hogyan lehet hasznos, ha a case utasítások egymás után lefutnak.

public class SwitchDemo2 {
    public static void main(String[] args) {
        int month = 2;
        int year = 2000;
        int numDays = 0;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if ( ((year % 4 == 0) && !(year % 100 == 0))
                     || (year % 400 == 0) )
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                numDays = 0;
                   break;
        }
        System.out.println("Number of Days = " + numDays);
    }
}



Kivételkezelő utasítások

A Java programozási nyelv egy kivételkezelésnek nevezett szolgáltatást nyújt, hogy segítse a programoknak a hibák felderítését és kezelését. Amikor egy hiba történik, a program „dob egy kivételt”. Ez azt jelenti, hogy a program normális végrehajtása megszakad, és megkísérel találni egy kivételkezelőt, vagyis egy olyan kódblokkot, ami a különféle típusú hibákat le tudja kezelni. A kivételkezelő blokk megkísérelheti a hiba kijavítását, vagy ha úgy tűnik, hogy a hiba visszaállíthatatlan, akkor szabályosan kilép a programból.

Alapvetően három utasítás játszik szerepet a kivételkezelésekben:

    a try utasítás tartalmaz egy utasítás blokkot, amiben a kivétel dobása elképzelhető
    a catch utasítás tartalmaz egy olyan utasításblokkot, ami le tudja kezelni az azonos típusú kivételeket. Az utasítások akkor hajtódnak végre, ha kivételtípus típusú kivétel váltódik ki a try blokkban
    a finally egy olyan utasítás blokkot tartalmaz, ami végrehajtódik akkor is, ha a try blokkban hiba történt, és akkor is, ha hiba nélkül futott le a kód.

Az utasítások általános alakja:

try {
    utasítás(ok)
} catch (kivételtípus kivételobjektum) {
    utasítás(ok)
} finally {
    utasítás(ok)
}

A kivételkezelés módszerének részletes ismertetésére később kerül sor.
Feltétel nélküli vezérlésátadás

A Java programnyelv háromféle feltétel nélküli vezérlésátadást támogat:

    a break utasítást
    a continue utasítást
    a return (visszatérés) utasítást

A break és a continue utasításokat használhatjuk címkével vagy anélkül. A címke egy azonosító, ami az utasítás előtt helyezkedik el. A címkét egy kettőspont (:) követi. A következő programrészletben láthatunk egy példát a címke alkalmazására:

statementName: someJavaStatement;

A break utasítás

A break utasításnak két alakja van: címke nélküli és címkés. A címke nélküli break utasítást korábban a switch-nél már használtuk. Ahol a címke nélküli break utasítással fejeztük be a sort, ott befejezi a switch utasítást, és átadja a vezérlést a switch után következő utasításnak. A címke nélküli break utasítás használható még a for, while vagy do-while ciklusokból való kilépésre is. A BreakDemo példaprogram tartalmaz egy for ciklust, ami egy bizonyos értéket keres egy tömbön belül:

public class BreakDemo {
    public static void main(String[] args) {
        int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };
        int searchfor = 12;
        int i = 0;
        boolean foundIt = false;
        for ( ; i < arrayOfInts.length; i++) {
            if (arrayOfInts[i] == searchfor) {
                foundIt = true;
                break;
            }
        }
        if (foundIt) {
            System.out.println("Found " + searchfor + " at index " + i + '.');
        } else {
            System.out.println(searchfor + "not in the array");
        }
    }
}

Emeltszintű érettségi feladat

https://www.youtube.com/watch?v=sdenyQS0GR4&feature=youtu.be

using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace infagazatiemelt2017
{
class IdozitettFelirat
{
string idozites;
string felirat;
public string Felirat
{
get { return felirat; }
}
public IdozitettFelirat(string idozites, string felirat)
{
this.idozites = idozites;
this.felirat = felirat;
}
//rövidebb megoldás
public int SzavakSzama
{
get { return felirat.Split(' ').Length + 1; }
}
//általános megoldás
public int SzavakSzama2
{
get
{
int db = 1;
foreach (char item in felirat)
{
if (item == ' ') db++;
}
return db;
}
}
public string SrtIdozites()
{
string srtido = "";
srtido += ConverterMinSec_HMinSec(idozites.Split(' ')[0]) + " --> ";
srtido += ConverterMinSec_HMinSec(idozites.Split(' ')[2]);
return srtido;
}
private string ConverterMinSec_HMinSec(string ido)
{ //05:12 00:05:12
string srt = "0";
int min = int.Parse(ido.Split(':')[0]);
string sec = ido.Split(':')[1];
srt += min / 60 + ":";
if (min % 60 > 9)
srt += min % 60;
else
srt += "0" + min % 60;
srt += ":" + sec;
return srt;
}
}
class Program
{
static List<IdozitettFelirat> FeliratokLista = new List<IdozitettFelirat>();
static void SrtKiir(string fn)
{
StreamWriter sw = new StreamWriter(fn);
for (int i = 0; i < FeliratokLista.Count; i++)
{
sw.WriteLine(i + 1);
sw.WriteLine(FeliratokLista[i].SrtIdozites());
sw.WriteLine(FeliratokLista[i].Felirat);
sw.WriteLine();
}
sw.Flush();
sw.Close();
}
static void Beolvasas(string fn)
{
StreamReader sr = new StreamReader(fn);
while (!sr.EndOfStream)
{
FeliratokLista.Add(new IdozitettFelirat(sr.ReadLine(), sr.ReadLine()));
}
sr.Close();
}
static string LegtobbSzavas()
{
int legtobb_index = 0;
for (int i = 0; i < FeliratokLista.Count; i++)
{
if(FeliratokLista[i].SzavakSzama > FeliratokLista[legtobb_index].SzavakSzama)
{
legtobb_index = i;
}
}
return FeliratokLista[legtobb_index].Felirat;
}
static void Main(string[] args)
{
Beolvasas("feliratok.txt");
Console.WriteLine("5.feladat: Feliratok száma:" + FeliratokLista.Count);
Console.WriteLine("7.feladat: Legtöbb szavas felirat:\n" + LegtobbSzavas());
SrtKiir("felirat.srt");
Console.ReadKey();
}
}
}
using System;

http://info.berzsenyi.hu/programozas

Nincsenek megjegyzések:

Megjegyzés küldése