質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

5707閲覧

javaで複数の標準入力を配列に格納し表示したいのですが最初の値を格納したくない場合どのようにすれば良いでしょうか?

uonitarou

総合スコア20

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/03/19 10:10

とても初歩的な質問かと思われますがJavaに触れてまだ日が浅く調べても私の知りたい情報が得られなかったのでこの場をお借りし、質問させていただきます。

前提・実現したいこと

Javaで複数の値の標準入力を行いそれを配列に格納し出力するプログラムです。


2 //こちらが下に入力する入力する値の個数です。
0
1

結果1
配列 = {0,1}

例2
3 //こちらが下に入力する入力する値の個数です。
2
4
2

結果2
配列 = {2,4,2}

※配列の要素数は3で固定

発生している問題・エラーメッセージ

例のように
2
0
1
と入力した場合に 
配列 = {2,0,1}となってしまいます。
本来最初の2は入力個数を入れているだけで配列への格納は無視したいのですが、一緒に格納されてしまいます。

該当のソースコード

Java

ソースコード

Scanner sc = new Scanner(System.in);

String[] strs = new String[3];
for (int i = 0; i < 3; i++) {
strs[i] = sc.nextLine();
System.out.println(strs[i]);
}

入力
3
2
1
5

結果
3 //この3を格納したくありません。
2
1
5

私自身で考えうるものは arrayListで作成し一度に格納した後に要素[0]のみ削除してしまおうかと考えているのですが、ほかにもっといい方法があると思うのでどなたかご教示を宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

可変長にするのであれば配列でなく List にするのが良いかと思います。Scanner は行が続く場合は hasNext() が true を返すので false になるまでループを回すと良いです。

java

1import java.util.Scanner; 2import java.util.List; 3import java.util.ArrayList; 4 5public class example { 6 public static void main(String[] args) { 7 Scanner sc = new Scanner(System.in); 8 List<String> strs = new ArrayList<>(); 9 while (sc.hasNext()) { 10 strs.add(sc.nextLine()); 11 } 12 for(String s : strs) { 13 System.out.println(s); 14 } 15 } 16}

入力を終える方法が UNIX (or Mac) と Windows で異なります。UNIX (or Mac) であれば CTRL-D、Windows であれば CTRL-Z (と改行) になります。

投稿2018/03/19 10:17

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uonitarou

2018/03/19 11:52

無事 したいことが行えました、 やはりリスとのほうが利便性があるようですね。 ありがとうございました。
guest

0

最初の一回だけ他の変数に入れるなりして、その後からfor でループさせればいいのでは

投稿2018/03/19 10:15

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uonitarou

2018/03/19 11:53

ご回答いただいた通り実行した結果無事行えました。ありがとうございました。
guest

0

解決した方法がしめされていますが、私は次のように書きます。

java

1import java.util.ArrayList; 2import java.util.List; 3import java.util.Scanner; 4 5public class ReadSample { 6 public static void main(String[] args) { 7 List<String> strs = new ArrayList<>(); 8 9 try (Scanner scanner = new Scanner(System.in)) { 10 int num = scanner.nextInt(); 11 scanner.nextLine(); // 改号までを読み飛ばす 12 13 for (int i = 0; i < num; i++) { 14 if (!scanner.hasNext()) { 15 break; 16 } 17 strs.add(scanner.nextLine()); 18 } 19 } 20 21 for (String str : strs) { 22 System.out.println(str); 23 } 24 } 25}

行の入力の途中で CTRL-D (windows なら CTRL-Z) が入力されたときの対処をしています。

投稿2018/03/19 20:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uonitarou

2018/03/20 06:33

例外処理対策を一切していなかったので今後そちらも考えて書いていこうと思います。ありがとうございました。
guest

0

解決済みですが、想定されている解法はこんな感じかと。

Java

1import java.util.Scanner; 2 3class Main { 4 public static void main(String[] args) { 5 try(Scanner sc = new Scanner(System.in)) { 6 int[] arr = new int[sc.nextInt()]; 7 for(int i = 0; i < arr.length; ++i) { 8 arr[i] = sc.nextInt(); 9 } 10 } 11 } 12}

最初に配列長を受け取れば良いだけです。


ただ、Javaの場合可変長リストが簡単に使えますので、一行目は読み捨てても良いです。

Java

1import java.util.*; 2 3class Main { 4 public static void main(String[] args) { 5 try(Scanner sc = new Scanner(System.in)) { 6 List<Integer> arr = new ArrayList<>(); 7 8 sc.nextInt(); 9 while(sc.hasNext()) { 10 arr.add(sc.nextInt()); 11 } 12 } 13 } 14}

ただなぜ最初に入力する数値の個数を入れるのかという疑問は残りました(笑)

可変長リストが簡単に使えない言語もありますので。

投稿2018/03/19 14:36

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uonitarou

2018/03/20 06:29

なるほど 確かに言語が決まってないようでしたので可変長リストのない言語向けだったのですね。勉強になりました。ありがとうございます。
guest

0

自己解決

import java.util.*;

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

Scanner sc = new Scanner(System.in); List<String> strs = new ArrayList<>(); while (sc.hasNext()) { strs.add(sc.nextLine()); } String num = strs.get(0); strs.remove(0); for(String s : strs) { System.out.println(s); } }

}

とし 一度最初の要素を取り出して出力することで無事無事上手く行えました。
ただなぜ最初に入力する数値の個数を入れるのかという疑問は残りました(笑)

ご回答いただきありがとうございました。

投稿2018/03/19 11:54

uonitarou

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問