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

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

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

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

Q&A

解決済

3回答

6251閲覧

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

Takahito

総合スコア66

Java

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

0グッド

0クリップ

投稿2015/10/10 12: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); }

}

よろしくお願いします!

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

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

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

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

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

guest

回答3

0

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

java

1 while(figure.hasNext()){ 2 values.add(figure.next()); 3 }

投稿2015/10/10 13:17

swordone

総合スコア20649

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

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

Takahito

2015/10/10 14:10

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

0

ベストアンサー

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

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

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

投稿2015/10/10 13:15

argius

総合スコア9388

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

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

Takahito

2015/10/10 13: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); } これだとエラーになってしまいます。初期値などの入力が必要なのでしょうか?
swordone

2015/10/10 13:30 編集

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

2015/10/10 13:36

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

2015/10/10 13: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文で実行したのですが、無限ループとなってしまいループをうまく抜け出すことができなくなってしまいました。 どのようなことが原因なのでしょう? 度々、よろしくお願いいたします。
argius

2015/10/10 13:55

sがnullになることは無いからです。 sが空であるかどうかで判定してください。 あと、Scannerを用意(newする)のは最初の1回だけでOKです。
Takahito

2015/10/10 14: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文を使わなくても出力されるのですね。 ありがとうございました!
guest

0

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

投稿2015/10/10 13:05

編集2015/10/10 13:07
yona

総合スコア18155

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

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

Takahito

2015/10/10 14:09

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問