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