2018. június 8., péntek

Interaktív program adatbekéréssel

Ahogy előre haladunk a programozás tanulásában egyre inkább felmerül az az igény, hogy ne csak előre megadott adatokkal dolgozzon a program, hanem menet közben mi is adhassunk neki munkát. Vagy egyszerűen csak befolyásoljuk a program működését. Az is szempont lehet, hogy adatbekéréssel tesztelésre szolgáló bemeneti értékekkel kideríthessük az esetleges szemantikai hibákat.

Az adatbekérést többféle módon is megoldhatjuk, én maradok az egyik egyszerű, direkt erre a feladattípusra készített osztály, a Scanner használatával. Látni fogjuk, hogy ez rugalmasan használható többféle típusú adat bevitelére is, és a használata meglehetősen egyszerű.

Mivel ez a Scanner egy előre megírt osztály, a program elkészítésének első lépése importálni azt a készítendő kódunkba, 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, ami az adatbekérésben segítségünkre lesz. Nézzünk akkor egy példakódot, amiben lépésenként elmagyarázom, hogy melyik kiemelt sornak mi a szerepe.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
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 lényegi részeket kiemelve nézzük meg a program részeit:

    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.

Scanner-rel többféle típusú adatot is bekérhetünk. Ez csak a használt metódustól függ. Példaként álljon itt néhány úgy, hogy előtte szerepeljen a változó is, amiben eltároljuk a beírt adatot:

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

A Scanner használható arra is, hogy egy adatbekérésnél egy adott határoló mintát megadva darabolva kérjünk be valamit, mondjuk neveket szóközzel elválasztva. Erre azonban majd a Stringek split() metódusát fogjuk használni, így erre külön most nem térnék ki.


#include <stdio.h>
#include <math.h>

int main(){
        int oszto, szam, i, prim_e;

        printf("A szam: ");
        scanf("%d",&szam);
        printf("\n");
        for(i=1; i<=szam; i++){
                prim_e=1;
                for(oszto=2; (oszto<=sqrt(i)) && (prim_e==1); oszto++){
                        if(i%oszto==0){
                                prim_e=0;
                        }
                }
                if(prim_e==1){
                        printf("%d\n", i);
                }
        }


        return 0;

}

import extra.*;
public class Prímszámok {

static boolean prím(int x) {
if(x<2)
return false;

int xgyöke = (int)Math.sqrt(x);
int osztókSzáma=1;
for(int i=2;i<=xgyöke;i++) {
if(x%i==0) {
osztókSzáma++;
}
}
return (osztókSzáma==1)?true:false; // a szám gyökéig
}

static boolean prím2(long x) {
if(x<2)
return false;

if(x==2)
return true;

if(x%2==0)
return false;

int xgyöke = (int)Math.sqrt(x);
int osztókSzáma=1;
for(int i=3;i<=xgyöke;i+=2) {
if(x%i==0) {
osztókSzáma++;
}
}
return (osztókSzáma==1)?true:false; // a szám gyökéig
}

public static void main(String[] args) {
System.out.println("Prímszám vagy sem? ");
int szám=Console.readInt("Szám: ");

if(szám<100 || szám>150)
System.out.println("A számnak 100 és 150 közé kell esnije!\nÍrjon be egy másik számot!");
szám=Console.readInt("Szám: ");

if (prím2(szám))
System.out.println(szám+": prímszám");
else
System.out.println(szám+": nem prímszám");



Nincsenek megjegyzések:

Megjegyzés küldése