Bir hesap makinesi oluşturmaya çalıştım, ancak çalışamıyorum çünkü kullanıcı girdisini nasıl alacağımı bilmiyorum .
Java'da kullanıcı girişini nasıl alabilirim?
Bir hesap makinesi oluşturmaya çalıştım, ancak çalışamıyorum çünkü kullanıcı girdisini nasıl alacağımı bilmiyorum .
Java'da kullanıcı girişini nasıl alabilirim?
Yanıtlar:
Gereksinimlere göre aşağıdaki seçeneklerden herhangi birini kullanabilirsiniz.
Scanner
sınıfimport java.util.Scanner;
Scanner scan = new Scanner(System.in);
String s = scan.next();
int i = scan.nextInt();
BufferedReader
ve InputStreamReader
sınıflarimport java.io.BufferedReader;
import java.io.InputStreamReader;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(s);
DataInputStream
sınıfimport java.io.DataInputStream;
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();
readLine
, Yöntem DataInputStream
sınıfı olmuştur kaldırıldı . String değerini almak için, BufferedReader ile önceki çözümü kullanmalısınız
Console
sınıfimport java.io.Console;
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());
Görünüşe göre, bu yöntem bazı IDE'lerde iyi çalışmıyor.
DataInputStream
ikili veri okuma içindir. Kullanılması readInt
üzerinde System.in
yok değil karakter verilerinden bir tamsayı ayrıştırmak, bunun yerine Unicode değerleri ve dönüş saçma yeniden yorumlayacaktır. Ayrıntılar DataInput#readInt
için bakınız ( DataInputStream
uygular DataInput
).
En basit yollardan biri, bir Scanner
nesneyi aşağıdaki gibi kullanmaktır :
import java.util.Scanner;
Scanner reader = new Scanner(System.in); // Reading from System.in
System.out.println("Enter a number: ");
int n = reader.nextInt(); // Scans the next token of the input as an int.
//once finished
reader.close();
Scanner reader1 = new Scanner(System.in);
?
Sen kullanabilirsiniz Tarayıcı sınıfını veya Konsol sınıfı
Console console = System.console();
String input = console.readLine("Enter input:");
Düğmesini kullanarak kullanıcı girişi alabilirsiniz BufferedReader
.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String accStr;
System.out.println("Enter your Account number: ");
accStr = br.readLine();
Bir String
değeri saklar , accStr
böylece onu int
kullanarak ayrıştırmanız gerekir Integer.parseInt
.
int accInt = Integer.parseInt(accStr);
Klavye girişlerini şu şekilde alabilirsiniz:
Scanner scanner = new Scanner (System.in);
System.out.print("Enter your name");
name = scanner.next(); // Get what the user types.
Kullanıcının adını soracak basit bir program oluşturabilir ve yanıtın girişleri kullandığı her şeyi yazdırabilirsiniz.
Veya kullanıcıdan iki sayı girmesini isteyin ve bu sayıları toplayabilir, çarpabilir, çıkarabilir veya bölebilir ve kullanıcı girişlerinin yanıtlarını tıpkı bir hesap makinesinin davranışı gibi yazdırabilirsiniz.
Yani Tarayıcı sınıfına ihtiyacınız var. Kullanmanız gereken import java.util.Scanner;
kodda ve kodda
Scanner input = new Scanner(System.in);
Girdi değişken bir isimdir.
Scanner input = new Scanner(System.in);
System.out.println("Please enter your name : ");
s = input.next(); // getting a String value
System.out.println("Please enter your age : ");
i = input.nextInt(); // getting an integer
System.out.println("Please enter your salary : ");
d = input.nextDouble(); // getting a double
Bu nasıl farklılık bakınız: input.next();
, i = input.nextInt();
,d = input.nextDouble();
Bir String'e göre int ve double, geri kalanı için aynı şekilde değişir. Kodunuzun üst kısmındaki içe aktarma ifadesini unutmayın.
Ayrıca "Tarayıcı sınıfı ve Kullanıcı Girdilerinin Alınması" adlı blog gönderisine bakın .
En iyi iki seçenek BufferedReader
ve Scanner
.
En yaygın kullanılan yöntem Scanner
ve ben basitlik ve kolay uygulama yanı sıra, ilkel verilere metin ayrıştırmak için güçlü yarar nedeniyle şahsen tercih ederim.
Tarayıcı Kullanmanın Avantajları
Scanner
Sınıfı kullanımı kolayBufferedInputStream'in Avantajları
Scanner
)Genel olarak her bir giriş yönteminin farklı amaçları vardır.
Büyük miktarda veri giriyorsanız sizin BufferedReader
için daha iyi olabilir
Çok sayıda sayı Scanner
giriyorsanız, çok uygun olan otomatik ayrıştırma yapar
Daha temel kullanımlar için tavsiye ederim Scanner
çünkü kullanımı daha kolay ve programları yazmak daha kolaydır. İşte nasıl oluşturulacağına hızlı bir örnek Scanner
. Aşağıda nasıl kullanılacağına dair kapsamlı bir örnek vereceğimScanner
Scanner scanner = new Scanner (System.in); // create scanner
System.out.print("Enter your name"); // prompt user
name = scanner.next(); // get user input
(Hakkında daha fazla bilgi için BufferedReader
See bir BufferedReader nasıl kullanılır ve bakın Chars okunması hatları )
import java.util.InputMismatchException; // import the exception catching class
import java.util.Scanner; // import the scanner class
public class RunScanner {
// main method which will run your program
public static void main(String args[]) {
// create your new scanner
// Note: since scanner is opened to "System.in" closing it will close "System.in".
// Do not close scanner until you no longer want to use it at all.
Scanner scanner = new Scanner(System.in);
// PROMPT THE USER
// Note: when using scanner it is recommended to prompt the user with "System.out.print" or "System.out.println"
System.out.println("Please enter a number");
// use "try" to catch invalid inputs
try {
// get integer with "nextInt()"
int n = scanner.nextInt();
System.out.println("Please enter a decimal"); // PROMPT
// get decimal with "nextFloat()"
float f = scanner.nextFloat();
System.out.println("Please enter a word"); // PROMPT
// get single word with "next()"
String s = scanner.next();
// ---- Note: Scanner.nextInt() does not consume a nextLine character /n
// ---- In order to read a new line we first need to clear the current nextLine by reading it:
scanner.nextLine();
// ----
System.out.println("Please enter a line"); // PROMPT
// get line with "nextLine()"
String l = scanner.nextLine();
// do something with the input
System.out.println("The number entered was: " + n);
System.out.println("The decimal entered was: " + f);
System.out.println("The word entered was: " + s);
System.out.println("The line entered was: " + l);
}
catch (InputMismatchException e) {
System.out.println("\tInvalid input entered. Please enter the specified input");
}
scanner.close(); // close the scanner so it doesn't leak
}
}
Not: Console
ve gibi diğer sınıflar DataInputStream
da uygulanabilir alternatiflerdir.
Console
şifreleri okuma gibi bazı güçlü özelliklere sahiptir, ancak tüm IDE'lerde (Eclipse gibi) kullanılamaz. Bunun nedeni Eclipse uygulamanızı bir sistem konsolu ile üst düzey bir işlem olarak değil, bir arka plan işlemi olarak çalıştırmasıdır. İşteConsole
sınıfın nasıl uygulanacağına dair faydalı bir örnek için bir bağlantı .
DataInputStream
öncelikle, girdiyi makineden bağımsız bir şekilde temel bir giriş akışından ilkel bir veri tipi olarak okumak için kullanılır. DataInputStream
genellikle ikili verileri okumak için kullanılır. Ayrıca belirli veri türlerini okumak için kolaylık yöntemleri sağlar. Örneğin, içinde herhangi bir sayıda satır içerebilen bir UTF Dizesini okumak için bir yöntemi vardır.
Bununla birlikte, daha karmaşık bir sınıftır ve yeni başlayanlar için önerilmez, bu nedenle uygulanması daha zordur. İşte a DataInputStream
.
DataInputStream
- buradaki açıklama, kullanım durumu ile aynı geliyor Scanner
: ilkellere veri okumak. Ayrıca, bir kullanıcı kullanıcı girdisini nasıl alacağını bilmiyorsa, büyük olasılıkla standart kütüphanenin bazı bölümlerinin belirli IDE'lerde neden kullanılamayacağını da anlamıyorlar. Kesinlikle benim için durum buydu - neden Console
kullanılamıyor?
try-with-resource
daha iyi olur.
Burada program kullanıcıdan bir sayı girmesini ister. Bundan sonra, program sayının rakamlarını ve rakamların toplamını yazdırır.
import java.util.Scanner;
public class PrintNumber {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = 0;
int sum = 0;
System.out.println(
"Please enter a number to show its digits");
num = scan.nextInt();
System.out.println(
"Here are the digits and the sum of the digits");
while (num > 0) {
System.out.println("==>" + num % 10);
sum += num % 10;
num = num / 10;
}
System.out.println("Sum is " + sum);
}
}
İşte sorudan programınızı kullanarak java.util.Scanner
:
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
int input = 0;
System.out.println("The super insano calculator");
System.out.println("enter the corrosponding number:");
Scanner reader3 = new Scanner(System.in);
System.out.println(
"1. Add | 2. Subtract | 3. Divide | 4. Multiply");
input = reader3.nextInt();
int a = 0, b = 0;
Scanner reader = new Scanner(System.in);
System.out.println("Enter the first number");
// get user input for a
a = reader.nextInt();
Scanner reader1 = new Scanner(System.in);
System.out.println("Enter the scend number");
// get user input for b
b = reader1.nextInt();
switch (input){
case 1: System.out.println(a + " + " + b + " = " + add(a, b));
break;
case 2: System.out.println(a + " - " + b + " = " + subtract(a, b));
break;
case 3: System.out.println(a + " / " + b + " = " + divide(a, b));
break;
case 4: System.out.println(a + " * " + b + " = " + multiply(a, b));
break;
default: System.out.println("your input is invalid!");
break;
}
}
static int add(int lhs, int rhs) { return lhs + rhs; }
static int subtract(int lhs, int rhs) { return lhs - rhs; }
static int divide(int lhs, int rhs) { return lhs / rhs; }
static int multiply(int lhs, int rhs) { return lhs * rhs; }
}
Scanner
nesne yaratmaya gerek yok ; biri yeterli olurdu.
System
Girdiyi almak için sınıfı kullanın .
http://fresh2refresh.com/java-tutorial/java-input-output/ :
Veriler klavyeden nasıl kabul edilir?
Üç nesneye ihtiyacımız var,
- System.in
- InputStreamReader
BufferedReader
- InputStreamReader ve BufferedReader, java.io paketindeki sınıflardır.
- Veriler, bir InputStream nesnesi olan System.in tarafından klavyeden bayt biçiminde alınır.
- Sonra InputStreamReader baytları okur ve bunları karakterlere çözer.
- Sonra nihayetinde BufferedReader nesnesi, karakterlerin, dizilerin ve satırların verimli okunmasını sağlamak için karakterleri arabelleğe alan bir karakter giriş akışından metin okur.
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);
System.in
(int ilk kod satırı) S
sınıf adı için sermayeye sahip olacaktır .
Ekstra bir ayrıntı. Bellek / kaynak sızıntısı riskini almak istemiyorsanız, işiniz bittiğinde tarayıcı akışını kapatmalısınız:
myScanner.close();
Java 1.7 ve daha sonra bunu derleme uyarısı olarak yakaladığını unutmayın (bunu nasıl bildiğimi sorma :-)
Kabul edilen cevabın iki ortak ihtiyacı ele alan daha gelişmiş bir versiyonu:
kod
package inputTest;
import java.util.Scanner;
import java.util.InputMismatchException;
public class InputTest {
public static void main(String args[]) {
Scanner reader = new Scanner(System.in);
System.out.println("Please enter integers. Type 0 to exit.");
boolean done = false;
while (!done) {
System.out.print("Enter an integer: ");
try {
int n = reader.nextInt();
if (n == 0) {
done = true;
}
else {
// do something with the input
System.out.println("\tThe number entered was: " + n);
}
}
catch (InputMismatchException e) {
System.out.println("\tInvalid input type (must be an integer)");
reader.nextLine(); // Clear invalid input from scanner buffer.
}
}
System.out.println("Exiting...");
reader.close();
}
}
Misal
Please enter integers. Type 0 to exit.
Enter an integer: 12
The number entered was: 12
Enter an integer: -56
The number entered was: -56
Enter an integer: 4.2
Invalid input type (must be an integer)
Enter an integer: but i hate integers
Invalid input type (must be an integer)
Enter an integer: 3
The number entered was: 3
Enter an integer: 0
Exiting...
Olmadan nextLine()
, kötü girişin sonsuz bir döngüde aynı istisnayı tekrar tekrar tetikleyeceğini unutmayın . Bunun next()
yerine duruma bağlı olarak kullanmak isteyebilirsiniz , ancak bunun gibi girdilerin this has spaces
birden fazla istisna oluşturacağını bilin .
throws IOException
Yanına ekle main()
, sonra
DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
Java'ya giriş yapmak çok basit, tek yapmanız gereken:
import java.util.Scanner;
class GetInputFromUser
{
public static void main(String args[])
{
int a;
float b;
String s;
Scanner in = new Scanner(System.in);
System.out.println("Enter a string");
s = in.nextLine();
System.out.println("You entered string " + s);
System.out.println("Enter an integer");
a = in.nextInt();
System.out.println("You entered integer " + a);
System.out.println("Enter a float");
b = in.nextFloat();
System.out.println("You entered float " + b);
}
}
import java.util.Scanner;
public class Myapplication{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a;
System.out.println("enter:");
a = in.nextInt();
System.out.println("Number is= " + a);
}
}
Bir BufferedReader kullanarak aşağıdaki gibi kullanıcı girişi alabilirsiniz:
InputStreamReader inp = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inp);
// you will need to import these things.
Onları böyle uygularsınız
String name = br.readline();
Kullanıcı konsolda ismini yazdığında "String name" bu bilgiyi saklayacaktır.
Saklamak istediğiniz bir numaraysa, kod şöyle görünecektir:
int x = Integer.parseInt(br.readLine());
Bu yardımcı olur!
Böyle bir şey olabilir ...
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("Enter a number: ");
int i = reader.nextInt();
for (int j = 0; j < i; j++)
System.out.println("I love java");
}
Bu, System.in.read()
işlevi kullanan basit bir koddur . Bu kod sadece yazılanları yazar. Sadece bir kez giriş almak istiyorsanız while döngüsünden kurtulabilir ve isterseniz bir karakter dizisinde cevapları saklayabilirsiniz.
package main;
import java.io.IOException;
public class Root
{
public static void main(String[] args)
{
new Root();
}
public Root()
{
while(true)
{
try
{
for(int y = 0; y < System.in.available(); ++y)
{
System.out.print((char)System.in.read());
}
}
catch(IOException ex)
{
ex.printStackTrace(System.out);
break;
}
}
}
}
Aşağıdaki gibi:
public String readLine(String tPromptString) {
byte[] tBuffer = new byte[256];
int tPos = 0;
System.out.print(tPromptString);
while(true) {
byte tNextByte = readByte();
if(tNextByte == 10) {
return new String(tBuffer, 0, tPos);
}
if(tNextByte != 13) {
tBuffer[tPos] = tNextByte;
++tPos;
}
}
}
ve örneğin, yapardım:
String name = this.readLine("What is your name?")
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Welcome to the best program in the world! ");
while (true) {
System.out.print("Enter a query: ");
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
if (s.equals("q")) {
System.out.println("The program is ending now ....");
break;
} else {
System.out.println("The program is running...");
}
}
}
}
Düğmesini kullanarak kullanıcı girişini alabilirsiniz Scanner
. next()
For String
veya nextInt()
for gibi farklı veri türleri için uygun yöntemleri kullanarak doğru giriş doğrulamasını kullanabilirsiniz Integer
.
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
//reads the input until it reaches the space
System.out.println("Enter a string: ");
String str = scanner.next();
System.out.println("str = " + str);
//reads until the end of line
String aLine = scanner.nextLine();
//reads the integer
System.out.println("Enter an integer num: ");
int num = scanner.nextInt();
System.out.println("num = " + num);
//reads the double value
System.out.println("Enter a double: ");
double aDouble = scanner.nextDouble();
System.out.println("double = " + aDouble);
//reads the float value, long value, boolean value, byte and short
double aFloat = scanner.nextFloat();
long aLong = scanner.nextLong();
boolean aBoolean = scanner.nextBoolean();
byte aByte = scanner.nextByte();
short aShort = scanner.nextShort();
scanner.close();
Kullanıcı girişi almanın en basit yolu Tarayıcı kullanmaktır. İşte nasıl kullanılması gerektiğine bir örnek:
import java.util.Scanner;
public class main {
public static void main(String[]args) {
Scanner sc=new Scanner(System.in);
int a;
String b;
System.out.println("Type an integer here: ");
a=sc.nextInt();
System.out.println("Type anything here:");
b=sc.nextLine();
Kod satırı import java.util.Scanner;
, programa programcının kodlarında kullanıcı girişlerini kullanacağını söyler. Dediği gibi, tarayıcı yardımcı programını içe aktarır. Scanner sc=new Scanner(System.in);
Programa kullanıcı girişlerini başlatmasını söyler. Bunu yaptıktan sonra, değeri olmayan bir dize veya tamsayı oluşturmanız ve bunları satırına a=sc.nextInt();
veya satırına koymanız gerekir a=sc.nextLine();
. Bu, değişkenlere kullanıcı girişlerinin değerini verir. Sonra kodunuzda kullanabilirsiniz. Bu yardımcı olur umarım.
import java.util.Scanner;
public class userinput {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Name : ");
String name = input.next();
System.out.print("Last Name : ");
String lname = input.next();
System.out.print("Age : ");
byte age = input.nextByte();
System.out.println(" " );
System.out.println(" " );
System.out.println("Firt Name: " + name);
System.out.println("Last Name: " + lname);
System.out.println(" Age: " + age);
}
}
class ex1 {
public static void main(String args[]){
int a, b, c;
a = Integer.parseInt(args[0]);
b = Integer.parseInt(args[1]);
c = a + b;
System.out.println("c = " + c);
}
}
// Output
javac ex1.java
java ex1 10 20
c = 30
args
Önce o dizinin uzunluğunu kontrol etmeden öğelere erişim yaptırımı : aşağı oy.
Diğerleri gibi Tarayıcı'yı kullanarak klavye girişi mümkündür. Ancak bu son derece grafik zamanlarda, grafik kullanıcı arayüzü (GUI) olmadan bir hesap makinesi yapmak anlamsızdır.
Modern Java'da bu, hesap makinesinin konsoluna benzeyen bir GUI düzenlemek için Scene Builder gibi bir JavaFX sürükle ve bırak aracı kullanmak anlamına gelir . Scene Builder'ı kullanmak sezgisel olarak kolaydır ve olay işleyicileri için zaten sahip olabileceğiniz ek Java becerisi gerektirmez.
Kullanıcı girişi için, GUI konsolunun üstünde geniş bir TextField dosyanız olmalıdır.
Bu, kullanıcının işlevlerini yerine getirmek istediği sayıları girdiği yerdir. TextField öğesinin altında, temel (yani toplama / çıkarma / çarpma / bölme ve bellek / geri çağırma / silme) işlevlerini yerine getiren bir dizi işlev düğmesi bulunur. GUI kullanıma sunulduktan sonra, her düğme işlevini Java uygulamasına bağlayan 'denetleyici' referanslarını ekleyebilirsiniz; örneğin, projenizin denetleyici sınıfındaki bir yönteme çağrı.
Bu video biraz eski ama yine de Scene Builder'ın ne kadar kolay kullanıldığını gösteriyor.
Scanner
olması çok iyi olduğuna inanıyorum .