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

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

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

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

Q&A

解決済

1回答

1244閲覧

java 全ての文字列を表示させる

yusuke_3_17_yu

総合スコア2

Java

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

0グッド

0クリップ

投稿2021/07/10 15:31

編集2021/07/10 15:47

javaで 5文字の文字列を5回入力し、5回目の入力終了後に全ての文字列を表示させるコードが書けません。

キーボードからの文字列入力とfor文とifを使うい書きましたが、どうしても上手くいきません。
教えて頂きたいです。どうか宜しくお願い致します。

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

for(int i = 1; i <= 10; i++) {
String n = new java.util.Scanner(System.in).nextLine();
String name += n;
if(i == 10) {
System.out.println(name + "です。");
}
}
}

}

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

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

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

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

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

kazuma-s

2021/07/10 15:36

> キーボードからの文字キーボードからの文字列入力とfor文とifを使うい書きましたが、どうしても上手くいきません。列入力とfor文とifを使うい書きましたが、どうしても上手くいきません。 その上手く行かないコードを質問に追記してください。 コードの添付方法は teratail のヘルプをよく読まないと失敗しますよ。
kazuma-s

2021/07/10 15:55

コードの追記、ありがとうございます。 しかし、コードの投稿に失敗しています。ヘルプは読んでいないのですか? 問題には 5 という値が何度も出てくるのに、コードにはそれがなく、 10 という値が何度も出てくるのを変だとは思いませんか?
Crimson_Tide

2021/07/10 18:32

どういう処理の流れを想定し、各行でどういう処理をするか説明できますか? 恐らくできないでしょう。Javaの基礎知識が圧倒的に不足しています。 体系的に学習し直すべきです。 プログラミング完全初心者がネットでかじった知識程度でまともに動くわけがありません。
yusuke_3_17_yu

2021/07/11 09:11

ご指摘頂きありがとうございます。 学習方法を見直してみます。 またご不明な点がございましたら、ご質問させていただきますので宜しくお願い致します。
guest

回答1

0

ベストアンサー

teratail の「ヘルプ」の「質問するときのヒント」を読むと、
「3-4. 発生している問題・エラーメッセージを書きましょう」と書いてあります。

エラーメッセージから、ソースのどこが悪いのかが分かります。
String name += n;
ここです。
変数 name を宣言するんだったら、String name:
または、初期化を含めて、String name = ""; です。
name に n を連結するなら、name += n; です。
String name = ""; を for文の前に置いて、
for文の中は name += n; だけにしてみてください。

キーボードから

text

1aaaaa 2bbbbb 3ccccc 4ddddd 5eeeee

と入力すると、aaaaabbbbbcccccdddddeeeee と表示されます。

ところが、入力をファイルに切り替えると、そのような表示もされません。
それは、Scanner の使い方を間違っているからです。

追記
一つの入力である System.in に対して、ループの中で
Scanner を何度も new するのはよくありません。
Scanner を new すると、生成された Scannerオブジェクトは
それぞれが 8KB 程度のバッファを保持します。
標準入力の System.in がキーボードなら、入力は行単位なので、
各Scannerオブジェクトのバッファに 1行ずつ入るだけで、
思い通りの処理がされますが、
javac Keisan <data.txt
のように標準入力をファイルに切り替えると、最初の Scannerオブジェクトが
自分の持っているバッファ一杯にファイルの内容を読み込んでしまいます。
nextLine で 1行取得しますが、残りの 4行はバッファ内に残ります。
2番目の Scannerオブジェクトが続きを読もうと思っても、
もうファイルの終わりに達しているので読み込めません。

ということで、次のように Scanner の new は 1回だけにしましょう。

Java

1import java.util.Scanner; 2 3public class Keisan { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 String name = ""; 7 for(int i = 0; i < 5; i++) 8 name += sc.nextLine(); 9 System.out.println(name + "です。"); 10 } 11}

もちろん、入力が複数のファイルだとか、複数の文字列で、それに対して
Scannerオブジェクトを複数生成するのは構いません。

投稿2021/07/10 22:07

編集2021/07/11 12:35
kazuma-s

総合スコア8224

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

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

yusuke_3_17_yu

2021/07/11 09:09

ありがとうございます。 コンパイル、実行できました。 しかしScannerの使い方が違うとかどういうことなのでしょうか?
yusuke_3_17_yu

2021/07/12 09:30

ありがとうございます。 理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問