0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめての記事投稿
Qiita Engineer Festa20242024年7月17日まで開催中!

【Java】入力されたn行データを出力したい時に空行が入ってしまう時対処法【paiza】

Last updated at Posted at 2024-06-29

paizaのレベルアップ問題集にこのような問題がある。
タイトル通り、N行のデータが入力されるから全部出力しろという問題だ。

N行のデータの入力 (paizaランク D 相当)


自分の回答

import java.util.*;
public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ!!
        Scanner scan = new Scanner(System.in);
        int line = scan.nextInt();
        for(int i = 1; i <= line; i++){
        String ans = scan.nextLine();
        System.out.println(ans);
        }
    }
}

入力(そのまま出力したいコード)

aaaaa
bbbbbb
cccc

実際の出力(不正解)


aaaaa
bbbbbb

このように、謎の改行が入ってしまった。それと最後の行が出力されていない。
なお、最後の行云々に関しては、for文の箇所を for(int i = 1; i <= line + 1; i++)にすれば解決する。……が、空行が出力されてしまう点に変わりは無い為、根本的な解決策ではない。

なので以下の解決方法を備忘録として記しておく。探せばもっと効率のいい方法が出てくるとは思うが、気にしないことにする。



解決方法1: nextInt() の後に nextLine() を1回呼び出して改行を消費する

import java.util.*;
public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ!!
        Scanner scan = new Scanner(System.in);
        int line = scan.nextInt();
        scan.nextLine();//これをいれると空行がなくなる
        for(int i = 1; i <= line; i++){
        String ans = scan.nextLine();
        System.out.println(ans);
        }
    }
}

解決方法2: 最初から nextLine() を使用して数値を文字列として読み込み、それを整数に変換する
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int line = Integer.parseInt(scan.nextLine()); // nextLine()で読み込んでから整数に変換
        for(int i = 0; i < line; i++){ // iの開始を1から0に変更
            String ans = scan.nextLine();
            System.out.println(ans);
        }
    }
}

解決方法3: while ループを使って読み込む

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int line = Integer.parseInt(scan.nextLine()); // nextLine()で読み込んでから整数に変換
        int count = 0;
        while (count < line) {
            String ans = scan.nextLine();
            System.out.println(ans);
            count++;
        }
    }
}

上にあげた3つの方法で出力したコード(正解)
aaaaa
bbbbbb
cccc
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?