私はプログラムに取り組んでおり、プロンプトが表示されたときにユーザーが複数の整数を入力できるようにしたいと考えています。スキャナーを使用しようとしましたが、ユーザーが入力した最初の整数のみを保存することがわかりました。例えば:
複数の整数を入力:1 3 5
スキャナーは最初の整数1のみを取得します。1つの行から3つの異なる整数すべてを取得し、後で使用することは可能ですか?これらの整数は、ユーザーの入力に基づいて操作する必要があるリンクリスト内のデータの位置です。ソースコードを投稿することはできませんが、これが可能かどうかを知りたかったのです。
ハッカーアースでいつも使っています
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String lines = br.readLine();
String[] strs = lines.trim().split("\\s+");
for (int i = 0; i < strs.length; i++) {
a[i] = Integer.parseInt(strs[i]);
}
数値を文字列として受け取り、String.split(" ")
を使用して3つの数値を取得します。
_String input = scanner.nextLine(); // get the entire line after the Prompt
String[] numbers = input.split(" "); // split by spaces
_
配列の各インデックスは、Integer.parseInt()
によってint
sにできる数値の文字列表現を保持します
これを試して
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
if (in.hasNextInt())
System.out.println(in.nextInt());
else
in.next();
}
}
デフォルトでは、スキャナーは、区切り文字として少なくとも1つの空白に一致する区切り文字パターン「\ p {javaWhitespace} +」を使用します。特別なことをする必要はありません。
空白(1つ以上)またはコンマのいずれかに一致させる場合は、スキャナーの呼び出しをこれに置き換えます
Scanner in = new Scanner(System.in).useDelimiter("[,\\s+]");
スキャナーにはhasNext()というメソッドがあります:
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
System.out.println(scanner.nextInt());
}
取得する整数の量がわかっている場合は、nextInt()
メソッドを使用できます
例えば
Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i < 3; i++)
{
integers[i] = sc.nextInt();
}
スキャナーを使用して、ユーザーが入力し、すべての値を配列に入れたい整数を処理する方法を次に示します。ただし、これは、ユーザーが入力する整数の数がわからない場合にのみ使用してください。わかっている場合は、整数を取得する回数だけScanner.nextInt()
を使用する必要があります。
import Java.util.Scanner; // imports class so we can use Scanner object
public class Test
{
public static void main( String[] args )
{
Scanner keyboard = new Scanner( System.in );
System.out.print("Enter numbers: ");
// This inputs the numbers and stores as one whole string value
// (e.g. if user entered 1 2 3, input = "1 2 3").
String input = keyboard.nextLine();
// This splits up the string every at every space and stores these
// values in an array called numbersStr. (e.g. if the input variable is
// "1 2 3", numbersStr would be {"1", "2", "3"} )
String[] numbersStr = input.split(" ");
// This makes an int[] array the same length as our string array
// called numbers. This is how we will store each number as an integer
// instead of a string when we have the values.
int[] numbers = new int[ numbersStr.length ];
// Starts a for loop which iterates through the whole array of the
// numbers as strings.
for ( int i = 0; i < numbersStr.length; i++ )
{
// Turns every value in the numbersStr array into an integer
// and puts it into the numbers array.
numbers[i] = Integer.parseInt( numbersStr[i] );
// OPTIONAL: Prints out each value in the numbers array.
System.out.print( numbers[i] + ", " );
}
System.out.println();
}
}
これはうまくいきます....
int a = nextInt();
int b = nextInt();
int c = nextInt();
または、ループで読むことができます
私はそれが古い議論であることを知っています:)私はそれが働いているコードの下でテストしました
`String day = "";
day = sc.next();
days[i] = Integer.parseInt(day);`
整数を入力として使用する場合
あなたの場合のように、たった3つの入力に対して:
import Java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a,b,c;
a = scan.nextInt();
b = scan.nextInt();
c = scan.nextInt();
より多くの入力については、ループを使用できます。
import Java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a[] = new int[n]; //where n is the number of inputs
for(int i=0;i<n;i++){
a[i] = scan.nextInt();
}
おそらくString.split(String regex)を探しているでしょう。正規表現には「」を使用します。これにより、個々にintに解析できる文字列の配列が得られます。
行全体を文字列として取得し、その後StringTokenizerを使用して番号を取得し(区切り文字としてスペースを使用)、それらを整数として解析します。これは、1行のn個の整数に対して機能します。
Scanner sc = new Scanner(System.in);
List<Integer> l = new LinkedList<>(); // use linkedlist to save order of insertion
StringTokenizer st = new StringTokenizer(sc.nextLine(), " "); // whitespace is the delimiter to create tokens
while(st.hasMoreTokens()) // iterate until no more tokens
{
l.add(Integer.parseInt(st.nextToken())); // parse each token to integer and add to linkedlist
}
ハッカーの地球試験のために特別にこのコードを作成しました
Scanner values = new Scanner(System.in); //initialize scanner
int[] arr = new int[6]; //initialize array
for (int i = 0; i < arr.length; i++) {
arr[i] = (values.hasNext() == true ? values.nextInt():null);
// it will read the next input value
}
/* user enter = 1 2 3 4 5
arr[1]= 1
arr[2]= 2
and soo on
*/
BufferedReaderを使用-
StringTokenizer st = new StringTokenizer(buf.readLine());
while(st.hasMoreTokens())
{
arr[i++] = Integer.parseInt(st.nextToken());
}
これを多くのコーディングサイトで使用する:
スペースで区切られた4つの整数入力の各行で3つのテストケースが与えられたと仮定します_1 2 3 4
_、_5 6 7 8
_、_1 1 2 2
_
_ int t=3,i;
int a[]=new int[4];
Scanner scanner = new Scanner(System.in);
while(t>0)
{
for(i=0; i<4; i++){
a[i]=scanner.nextInt();
System.out.println(a[i]);
}
//USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem
t--;
}
_
ケース2:各行の整数の数が与えられていない場合
_ Scanner scanner = new Scanner(System.in);
String lines=scanner.nextLine();
String[] strs = lines.trim().split("\\s+");
_
最初にtrim()する必要があることに注意してください:trim().split("\\s+")
-そうでなければ、例えば_a b c
_を分割すると、最初に2つの空の文字列が出力されます
_ int n=strs.length; //Calculating length gives number of integers
int a[]=new int[n];
for (int i=0; i<n; i++)
{
a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer
System.out.println(a[i]);
}
_