🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

4898閲覧

リストから配列変換後にうまく出力されません

d_96a

総合スコア15

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/12/17 01:09

実現したいこと

oやxを入力後リストに格納され、リストを配列に変換し、
最終的にはoの場合はxを、xの場合はoを出力するプログラムを作成しようとしています。
しかし、以下のように出力(エラーは出ていません)され、行き詰っています。
下記コードのどの部分が間違っているかご教示ください。
※o,xは自動で入力されます。

入力:oxoxox
期待値:xoxoxo
実際の出力:(何も表示されない)

試したこと

######▼java1のコード
・リストの中身を1行毎で取得することがわかっていなかった
・リスト生成メソッドのfor文内でindex番号に応じて出力結果が変わるようにしていた

######▼java2のコード
・メインメソッドで配列(元々リスト)内の要素を文字列に変換
・for文内でcharAtで一文字ずつ取得し、if文で出力結果が変化するように変更

java1

1package track; 2import java.util.Scanner; 3import java.util.ArrayList; 4 5public class App { 6 public static void main(String[] args) { 7 String[] lines = getStdin(); 8 for (int i = 0, l = lines.length; i < l; i++) { 9 String output = String.format("%s",lines[i]); 10 System.out.println(output); 11 } 12 } 13 private static String[] getStdin() { 14 Scanner scanner = new Scanner(System.in); 15 ArrayList<String> lines = new ArrayList<>(); 16 int i=0; 17 String o="o",x="x",str=lines.get(i); 18 while (scanner.hasNext()) { 19 lines.add(scanner.nextLine()); 20 if(lines.get(i).equals(o)) { lines.set(i,"x"); } 21 else if(lines.get(i).equals(x)) { lines.set(i,"o"); } 22 else { lines.set(i,""); } 23 i++; 24 } 25 return lines.toArray(new String[lines.size()]); 26 } 27} 28

java2

1package track; 2import java.util.Scanner; 3import java.util.ArrayList; 4 5public class App { 6 public static void main(String[] args) { 7 String[] lines = getStdin(); 8 String str = Arrays.toString(lines); 9 for (int i=0; i<str.length(); i++) { 10 str = str.charAt(i); 11 if(str=="o"){str=="x";} 12 else if(str=="x"){str=="o";} 13 else{str=="";} 14 System.out.print(str); 15 } 16 } 17 private static String[] getStdin() { 18 Scanner scanner = new Scanner(System.in); 19 ArrayList<String> lines = new ArrayList<>(); 20 int i=0; 21 while (scanner.hasNext()) { 22 lines.add(scanner.nextLine()); 23 } 24 return lines.toArray(new String[lines.size()]); 25 } 26}

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

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

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

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

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

azuapricot

2019/12/17 01:19

デバッグはしてみましたか? デバッグのやりかたがわからないなら、 System.out.println() をうまく使うことで処理の流れを追うこともできます
dodox86

2019/12/17 01:23

(1) java1の方では「1行毎」、とのような表現をされていますが、入力例は"oxoxox" と1行のみです。複数行あるのですか? (2) java1とjava2、2つのコードをご提示されていますが、どちらを直したいのでしょうか?
d_96a

2019/12/17 01:25

ご回答ありがとうございます。 デバッグはしていなかったです。 System.out.println()を要所要所に記載して実行するという認識でよろしいでしょうか。
azuapricot

2019/12/17 01:27

質問する前にまずデバッグをしてみることは基本中の基本です。 System.out.println(変数名); で変数の中身が想定通りか確認したり、 System.out.println("1"); のように目印を入れてみてコンソールに何が出力されるかで大まかな処理の流れを理解することができますよね。
dodox86

2019/12/17 01:29

なんと。そりゃ先にご自分でデバッグしないと。そうでないと何か動かないんで教えて、との「作業依頼」になってしまいます。
d_96a

2019/12/17 01:29

@dodox86さん ご回答ありがとうございます。 複数行ではなく1行のみ入力されます。 java1の方でお願いしてもよろしいでしょうか。
azuapricot

2019/12/17 01:31

「お願いしてもよろしいでしょうか」 の前に、まずはデバッグですよ。 デバッグしてみて、動きを理解すれば自ずと修正方法も分かるはずです。 それでもわからなければ、具体的にわからないところを質問に追記して下さい。 あとコードが2つもあっては回答者としても分かりにくいです。 どっちが何を表しているのかなんてわからないので、質問に関係あるコードだけにしましょう。
dodox86

2019/12/17 01:33

まず、デバッグしましょう。
d_96a

2019/12/17 01:41

度々申し訳ありません。 ひとまず上記コードをデバッグします。 それでもわからなければ、結果参照後もう一度お聞きしてもよろしいでしょうか。
azuapricot

2019/12/17 01:52

はい、質問が修正されれば追記にコメントした人にも通知が行きます。 ゆっくりでいいのでデバッグしてみてください。
swordone

2019/12/17 02:09

そもそもこの2つ、どっちもコンパイルエラーになりますよね?
guest

回答1

0

自己解決

おかげさまで小さなミスに気づけました。
文字列に「==」を使用していることが原因だったようで、
.equalsを使用することで解決することができました。
ありがとうございました。

Java

1public static void main(String[] args) { 2 Scanner scanner = new Scanner(System.in); 3 String str = scanner.next(); 4 String[] result = str.split(""); 5 for (int i=0; i<result.length; i++) { 6 if(result[i].equals("o")) { result[i]="x"; } 7 else if(result[i].equals("x")) { result[i]="o"; } 8 else { result[i]="a"; } 9 System.out.print(result[i]); 10 } 11 }

投稿2019/12/19 02:54

編集2019/12/19 02:57
d_96a

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問