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

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

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

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

Q&A

解決済

2回答

1395閲覧

配列にスペースを含む入力を格納する時のエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/03/10 09:43

編集2018/03/10 10:01

前提・実現したいこと

入力で配列の数と指定した数の大文字英字を入力し、
入力に「Y」の文字があった時に「Yes」と返すプログラムを書いています。

D S Y M U Yes

各入力英字の間には半角スペースを含みます。

発生している問題・エラーメッセージ

for(int c = 0; c<color.length(); c++){ colors[c]= color.split(" ", 0); }

の部分で、以下サイトを参考にsplitを実装しようとしているのですが、
参考サイト

型の不一致: String[] から String には変換できません

というエラーが表示され、どのように修正したら良いかわからず困っています。

該当のソースコード

Java

1import java.util.Arrays; 2import java.util.Scanner; 3 4public class Main { 5 6 public static void main(String[] args) { 7 Scanner scan = new Scanner(System.in); 8 int N = scan.nextInt(); 9 //array 10 String color = scan.next(); 11 System.out.println("color=" + color); //1文字目しか表示されない 12 String [] colors = new String[color.length()]; 13 for(int c = 0; c<color.length(); c++){ 14 colors[c]= color.split(" ", 0); 15 } 16 17 if(Arrays.asList(colors).contains('Y')){ 18 System.out.println("Yes"); 19 }else{ 20 System.out.println("No"); 21 } 22 23 } 24 25} 26

###追記
ご指摘いただいた点を修正したのですが、
実行してみると新たな部分でエラーが発生しているようでした。

修正後コード

Java

1import java.util.Arrays; 2import java.util.Scanner; 3 4public class Main { 5 6 public static void main(String[] args) { 7 Scanner scan = new Scanner(System.in); 8 int N = scan.nextInt(); 9 //array 10 String color = scan.next(); 11 System.out.println("color=" + color); //現状だと1文字目しか表示されない 12 String [] colors = color.split(" ", 0); 13 for(int c = 0; c<color.length(); c++){ 14 System.out.println(colors[c]); 15 } 16 17 if(Arrays.asList(colors).contains('Y')){ 18 System.out.println("Yes"); 19 }else{ 20 System.out.println("No"); 21 } 22 23 } 24 25}

実行時の表示

D S Y M U Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at javaalgorithm.Main.main(B89.java:9)

補足情報(FW/ツールのバージョンなど)

Eclipse Java EE IDE for Web Developers.
Version: Neon.3 Release (4.6.3)

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

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

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

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

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

guest

回答2

0

ベストアンサー

for(int c = 0; c<color.length(); c++){ colors[c]= color.split(" ", 0); }

で使用しているsplit()のJavadocは読みましたか?
StringクラスのJavadocsplit()を探してみると、下記のように記述されています。

public String[] split(String regex)
この文字列を、指定された正規表現に一致する位置で分割します。
このメソッドの動作は、2つの引数を取るsplitメソッドを、指定された式および制限引数ゼロを指定し>

て呼び出した場合と同じになります。つまり、結果として得られる配列には後続の空の文字列は含まれません。

つまり、split()の返り値はString[]ですね。

現状、colors[c]= color.split(" ", 0);において、split()の返り値をcolors[c]に代入しようとしていますが、colors変数はString[]であるものの、colors[c]にはStringクラスのオブジェクトが格納されなければいけないのにString[]を代入しようとしているためエラーになっています。

以上より、split()の返り値をString[]の変数に代入させればエラーは消えるはずです。

◆その他の指摘
・標準ライブラリを扱っていてエラーが発生する時は、必ずJavadocを読む癖をつけましょう。
・エラーと書かれていても、コンパイルエラーなのか、Exceptionが発生しているのかわかりません。エラーがどのようなエラーなのか、質問文を修正して下さい。

投稿2018/03/10 09:55

yukapome789

総合スコア361

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

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

退会済みユーザー

退会済みユーザー

2018/03/10 09:58

ご回答いただきましてありがとうございます。 学習中の身のため、理解できていない点が多く、ご迷惑をおかけして申し訳ございません。
yukapome789

2018/03/10 10:05

今見つけましたが、「//1文字目しか表示されない」とあるのは、まだcolor変数に一文字しか取得できていないようですね。質問が別になりますので、next()で取得出来ない件は、下記の質問から質問ください。そこを解決しないと、恐らくsplitできてるのかできてないのかわからないと思います。回答した内容を理解できなければ、どこまではわかってどこからわからないのか教えて下さい。https://teratail.com/questions/116521
yukapome789

2018/03/10 10:15

追記いただいたコードを動かしてみました。アルファベットの前に数字を入力させること前提ですが、その数字の入力を忘れているからだと思います。
退会済みユーザー

退会済みユーザー

2018/03/10 10:43

まあ 多分 paiza の Dランク問題だとおもうんだけど 前回の私の回答を理解できてないしね
yukapome789

2018/03/10 10:47

確かにasahina1979さんのソースで解決してますよね。ranranwayさん、動いたからおkって感じじゃなくて根本的に理解したいんだな~ってのが伝わってきたので詳しく書いてみました~理解してもらえるといいな・・・
退会済みユーザー

退会済みユーザー

2018/03/10 10:50 編集

理解してほしいも含め 途中のスタックトレースを消すだけじゃ paiza の仕様じゃ リジェクトされるうに想定して最後の出力に 空白を多く出力しておいた。(w
yukapome789

2018/03/10 10:58

見てきました。ほんとだww
guest

0

リンク先に書いてあることをじっくり読んで理解しましたか?

Java

String str = "りんご,レモン,すいか,ぶどう";
String[] fruit = str.split(",", 0);

上記を実行するとfruitの配列には下記のように格納されます。

fruit[0] = "りんご";
fruit[1] = "レモン";
fruit[2] = "すいか";
fruit[3] = "ぶどう";

これが理解できているならば、次の答えも自然と見えるはず。

Java

1String[] colors = color.split(" ", 0);

追記を受けて

D S Y M U
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at javaalgorithm.Main.main(B89.java:9)

最初に項目数を渡すのを忘れているだけかと。

投稿2018/03/10 09:47

編集2018/03/10 10:04
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2018/03/10 09:58

ご回答いただきましてありがとうございます。
退会済みユーザー

退会済みユーザー

2018/03/10 10:15

追記の件もご回答いただきましてありがとうございます。
退会済みユーザー

退会済みユーザー

2018/03/10 10:22

理解できてないとおもうよ 前の私の解答を理解してたらこんな質問はしないと思う 前の解答者のコメントに軽くnext の仕様を描いておいたのにみてないか理解してないみたいだし
LouiS0616

2018/03/10 10:44

ですねぇ。 学校の方針なのか色んな言語に手を出しているようですが、まずは一つの言語を最低限書けるようになった方が良い気がします。 そうすれば類推あるいは連想して理解できる場面も多いはず。多分。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問