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

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

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

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

Q&A

解決済

2回答

551閲覧

main画面でエラーが出て解決できない

sanchunaka

総合スコア26

Java

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

0グッド

0クリップ

投稿2024/08/21 04:57

実現したいこと

引数のListからtargetパラメータで指定された文字列を検索し、その直後にtoInsertパラメータで指定された文字列を挿入する関数insertAfter()を完成させたい。

実装内容

この関数は、引数として文字列のList List<String> input,ターゲットとなる文字列 String target, 挿入する指定文字列 String toInsert を受け取ります。 引数のListからtargetパラメータで指定された文字列を検索し、その直後にtoInsertパラメータで指定された文字列を挿入します。 targetで指定された文字列が見つからなかった場合は要素の追加はせずに元のListを返します。 この関数では入力のListインスタンスそのものに要素の追加を行います。

このような設定になっています。

期待する結果は:
["bravo", "alpha", "charlie"," delta", "charlie"]

発生している問題・分からないこと

コードを実行すると以下のエラーになります。

javac Main.java
java Main

Main.java:30: エラー: 不適合な型: String[]をStringに変換できません:
insertAfter(list,target,toInsert);
^
Main.java:32: エラー: 不適合な型: String[]をStringに変換できません:
System.out.println(insertAfter(list,target,toInsert));
^

ノート: 一部のメッセージは簡略化されています。-Xdiags:verboseで再コンパイルして完全な出力を取得してください
エラー2個

[Done] exited with code=1 in 1.489 seconds

該当のソースコード

Main.java

1import java.util.*; 2import java.util.stream.Collectors; 3 4 5public class Main{ 6 7 public static List<String> insertAfter(List<String> input, String target, String toInsert) { 8 // `target`の示す文字列の直後に`toInsert`を挿入する 9 // `target`が見つからない場合は、値の挿入は行わない 10 int i; 11 i = input.indexOf(target); 12 if (-1 == i){ 13 return input; 14 } else { 15 input.add(i + 1, toInsert); 16 return input; 17 } 18 } 19 20 21 public static void main(String[] args){ 22 23 // List<データ型名> オブジェクト名 = new ArrayList<データ型名>(); 24 List<String> list = new ArrayList<>(Arrays.asList("bravo", "alpha", "charlie")); 25 26 String target = "alpha"; 27 28 String[] toInsert = {"alpha","delta"}; 29 30 insertAfter(list,target,toInsert); 31 32 System.out.println(insertAfter(list,target,toInsert)); 33 System.out.println(list); 34 35 } 36}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

コードを実行すると以下のエラーになります。

javac Main.java
java Main

Main.java:30: エラー: 不適合な型: String[]をStringに変換できません:
insertAfter(list,target,toInsert);
^
Main.java:32: エラー: 不適合な型: String[]をStringに変換できません:
System.out.println(insertAfter(list,target,toInsert));
^

ノート: 一部のメッセージは簡略化されています。-Xdiags:verboseで再コンパイルして完全な出力を取得してください
エラー2個

[Done] exited with code=1 in 1.489 seconds

補足

CODEPREP,Java演習List編https://codeprep.jp/books/110/chapters/2/sections/4
で勉強させていただいています。
コードinsertAfter(){}は検索して完成したのですが、
main()がありませんので自分なりに作成したのですが、
ここで詰まっています。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

insertAfter() の第3引数は String だと定義されていて、main() での呼び出しでは String[] toInsert を指定しているのでエラーです。

期待する結果は:
["bravo", "alpha", "charlie"," delta", "charlie"]

でしたら、

java

1insertAfter(list, target, "delta"); 2insertAfter(list, target, "charlie");

と別の引数で2回呼ぶ必要があるでしょう。

投稿2024/08/21 05:39

int32_t

総合スコア21769

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

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

sanchunaka

2024/08/21 11:53

回答ありがとうございます。 解決できそうです。 仕事から帰ってから、整理したいと思います。 表示はできるようになりました。 やってみましたが、少し修正が必要です 助かりました
sanchunaka

2024/08/21 19:38

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 ここにコードを掲載しておきます。 import java.util.*; import java.util.stream.Collectors; public class Main{ public static List<String> insertAfter(List<String> input, String target, String toInsert) { // `target`の示す文字列の直後に`toInsert`を挿入する // `target`が見つからない場合は、値の挿入は行わない int i; // indexOfメソッドは、指定された部分文字列が最初に登場した位置を、 // 文字列の先頭を0としたインデックス番号で返します。 // 文字列が見つからなかった場合、戻り値は-1となります。 i = input.indexOf(target); if (-1 == i){ return input; } else { input.add(i + 1, toInsert); return input; } } public static void main(String[] args){ // List<データ型名> オブジェクト名 = new ArrayList<データ型名>(); List<String> list = new ArrayList<>(Arrays.asList("bravo", "alpha", "charlie")); String target = "alpha"; System.out.println(insertAfter(list,target,"delta")); } } /*実行結果 >javac Main.java >java Main [bravo, alpha, delta, charlie] [Done] exited with code=0 in 1.36 seconds */
guest

0

細かい点ですが。
メソッドの説明は /** ~ */ を使って javadoc に出るようにしておくと良いです。
変数の宣言と値の設定は、可能なら同時に行ったほうが値の設定忘れの可能性を無くせます。
return が同じなら途中で return せず最後にするようにすると、何時でも同じモノを返すことを示せます。

if() { foo(); return a; } else { bar(); return a; }

if() { foo(); } else { bar(); } return a;

java

1 /** 2 * `target`の示す文字列の直後に`toInsert`を挿入する。<br>`target`が見つからない場合は、値の挿入は行わない。 3 */ 4 public static List<String> insertAfter(List<String> input, String target, String toInsert) { 5 int i = input.indexOf(target); 6 if (i >= 0) { 7 input.add(i + 1, toInsert); 8 } 9 return input; 10 }

投稿2024/08/21 14:38

jimbe

総合スコア13230

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

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

sanchunaka

2024/08/21 19:41

丁寧な説明を頂きありがとうございます。 これから、気をつけてコードを書いていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問