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

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

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

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

Q&A

解決済

1回答

2060閲覧

[Java]Scannerのnext()とnextLine()の違いについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

2クリップ

投稿2020/03/21 11:43

編集2020/03/21 11:46

勉強はじめたばかりの初心者です。
Javaの練習問題で「N行の標準入力を受けてそのまま標準出力する」プログラムを書いています。

標準入力のケースは以下を想定していて、すべてのケースで通るようにしたいです。
1行目で「N行の標準出力」のNにあたる部分を受け取り、その後にN行の入力が続きます。

【ケース1】 3 aaa bbb ccc (期待する出力) aaa bbb ccc 【ケース2】 1 a b c (期待する出力) a b c

試してみたこと

1行ごとに受け取ってそのまま出力するプログラムなので、ScannerのnextLine()を利用すればいいと考えました。

Java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 7 // N行の入力を受け付ける(Nを決める) 8 int N = sc.nextInt(); 9 10 // N行の入力を配列に入れて 11 String inputs[] = new String[N]; 12 for(int i = 0; i < inputs.length; i++) { 13 inputs[i] = sc.nextLine(); 14 } 15 16 // 配列の中身を順に出力する 17 for(String input_item: inputs) { 18 System.out.println(input_item); 19 } 20 } 21}

上記のコードですと、出力が

aaa bbb

になってしまいます。配列の1つ目の要素が空白?になってしまっているのだと思うんですが......。

質問

上記のコードがうまくいかないのはなぜでしょうか。
nextInt()の部分がなにか関係しているのかなと思うのですが原因がわかりません。

それとも私の意図していないところに原因がありますか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

Scannerはよくしりませんが、nextInt()したあとで改行文字が残っているから、なのではないでしょうか。だから、取れる方法はどっちかなのかと。

  1. nextInt()の直後にnextLine()して改行文字を捨てる
  2. 一行目「も」nextLIne()で読み込んで数値に変換する

標準入力からデータを入力するのはめんどうなので、hoge.txtから読み込むようにしてみました。

dos> type hoge.txt 3 aaa bbb ccc

で、実行結果はこんなかんじ。

text

1--------- addNextLine() ------- 2aaa 3bbb 4ccc 5--------- nextLineAndParseInt() ------- 6aaa 7bbb 8ccc

java

1import java.io.FileInputStream; 2import java.util.Scanner; 3public class Main { 4 public static void main(String[] args) throws Exception { 5 System.out.println("--------- addNextLine() -------"); 6 addNextLine(); 7 System.out.println("--------- nextLineAndParseInt() -------"); 8 nextLineAndParseInt(); 9 } 10 11 private static void addNextLine() throws Exception { 12 final Scanner sc = new Scanner(new FileInputStream("hoge.txt")); 13 // Scanner sc = new Scanner(System.in); 14 // N行の入力を受け付ける(Nを決める) 15 final int N = sc.nextInt(); 16 sc.nextLine(); // ついか!! 17 // N行の入力を配列に入れて 18 final String inputs[] = new String[N]; 19 for (int i = 0; i < inputs.length; i++) { 20 inputs[i] = sc.nextLine(); 21 } 22 // 配列の中身を順に出力する 23 for (String input_item : inputs) { 24 System.out.println(input_item); 25 } 26 } 27 28 private static void nextLineAndParseInt() throws Exception { 29 final Scanner sc = new Scanner(new FileInputStream("xxx.txt")); 30 // Scanner sc = new Scanner(System.in); 31 // N行の入力を受け付ける(Nを決める) 32 final int N = Integer.parseInt(sc.nextLine()); // おきかえ!! 33 // N行の入力を配列に入れて 34 final String inputs[] = new String[N]; 35 for (int i = 0; i < inputs.length; i++) { 36 inputs[i] = sc.nextLine(); 37 } 38 // 配列の中身を順に出力する 39 for (String input_item : inputs) { 40 System.out.println(input_item); 41 } 42 } 43}

投稿2020/03/21 12:26

shiketa

総合スコア4061

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

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

退会済みユーザー

退会済みユーザー

2020/03/21 12:41

ありがとうございます.....!できました! 改行コードと型の変換について理解が足りなかったです!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問