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

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

ただいまの
回答率

90.48%

  • Java

    14126questions

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

リストの追加と出力 (Java学習中)

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,543

Takahito

score 58


今回は、任意の文字を入力をしてリストに追加し、それらのリストの中身を表示するというコードを書きたいと思いましたが、addのところでコンパイルエラーが出てしまいました。
考え方が間違っているのでしょうか?
もしよければ、正しいコードや考え方をご教授いただきたいです。

 import java.util.ArrayList;
 import java.io.*;

 public static void main(String[args]){
 
   ArrayList<String> values = new ArrayList<String>();
        System.out.println("入力してください");
        Scanner figure = new Scanner(System.in);
        values.add(figure);
        int count = values.size();
        
        for (int i = 0; i < count; i++){
            System.out.println(values);
        }
}

よろしくお願いします!
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

Scannerは文字通り、何らかの入力から読み取りをするスキャナーです。
ここでは、標準入力(System.in)から入力したものを読み取るようにしています。

リストに渡したいのは読み取った文字列なので、スキャナーが読み取った文字を取得する必要があります。
String s = figure.nextLine();とすると、入力した1行をスキャナーが返してくれます。

何度も読み取る必要があるようですので、ループを使います。
ループの終了は、何も入力しなかったときなどにすると良いでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/10 22:28

    ありがとうございます。たしかに、このままだと下のループは意味がないもので必ず1個のものを出力するコードでしたね。

    「何も入力しなかった時」ということを表現するためのコードを考えてみたのですが、

    // 複数の数値を入力させ、昇順に並べ替え、最大値と最小値を出す
    ArrayList<String> values = new ArrayList<String>();
    String s;
    Scanner figure;
    // 文字が入力されない限り続くループ文
    for (String s !== null) {
    System.out.println("入力してください");
    figure = new Scanner(System.in);
    s = figure.nextLine();
    values.add(s);
    }
    int count = values.size();

    for (int i = 0; i < count; i++){
    System.out.println(values);
    }

    これだとエラーになってしまいます。初期値などの入力が必要なのでしょうか?

    キャンセル

  • 2015/10/10 22:29 編集

    > for (String s !== null)
    forではなくwhileではないでしょうか?
    それから演算子の=が1個多いです

    キャンセル

  • 2015/10/10 22:36

    答えそのものを書いてしまいますが、こんな感じにすると、それっぽくなると思います。
    Scanner figure = new Scanner(System.in);
    // 文字が入力されない限り続くループ文
    while (true) {
    System.out.print("入力してください >");
    String s = figure.nextLine();
    if (s.isEmpty()) {
    break;
    }
    values.add(s);
    }

    キャンセル

  • 2015/10/10 22:46

    何回も申し訳ありません。
    今までfor文一辺倒でwhile文は避けてきていました。

    ArrayList<String> values = new ArrayList<String>();
    String s;
    Scanner figure;
    // 文字が入力されない限り続くループ文
    do {
    System.out.println("入力してください");
    figure = new Scanner(System.in);
    s = figure.nextLine();
    values.add(s);
    } while (s != null);

    int count = values.size();

    for (int i = 0; i < count; i++){
    System.out.println(values);
    }

    そして、初めは何も入っていないのでdo while文で実行したのですが、無限ループとなってしまいループをうまく抜け出すことができなくなってしまいました。
    どのようなことが原因なのでしょう?
    度々、よろしくお願いいたします。

    キャンセル

  • 2015/10/10 22:55

    sがnullになることは無いからです。
    sが空であるかどうかで判定してください。

    あと、Scannerを用意(newする)のは最初の1回だけでOKです。

    キャンセル

  • 2015/10/10 23:08

    ArrayList<String> values = new ArrayList<String>();
    String s;
    Scanner figure;
    int count;
    figure = new Scanner(System.in);
    // 文字が入力されない限り続くループ文
    while (true){
    System.out.println("入力してください");

    s = figure.nextLine();

    // 配列が空かどうかを判定するisEmpty
    if (s.isEmpty()){
    break;
    }
    values.add(s);
    }

    System.out.println(values);

    このようにすると、できました。
    最後の出力のところは、for文を使わなくても出力されるのですね。
    ありがとうございました!

    キャンセル

0

宣言したリストの型とaddしようとしているインスタンスの型が異なります。
values.add(figure.nextString())にしたらいいんじゃないでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/10 23:09

    nextString()というものをうまく使用することができませんでした。。。
    調べて今後に生かしていこうと思います。ありがとうございました。

    キャンセル

0

これは標準入力への入力をScannerから全部取りたいということでしょうか.
とすればまずScannerから取れる限りの要素をArrayListに詰める必要があります.
エラーの部分を次のように書き換えます.
        while(figure.hasNext()){
            values.add(figure.next());
        } 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/10 23:10

    ありがとうございます。
    そのようなやり方でもできるのですね!

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    14126questions

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