実現したいこと
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}
デバッグはしてみましたか?
デバッグのやりかたがわからないなら、 System.out.println() をうまく使うことで処理の流れを追うこともできます
(1) java1の方では「1行毎」、とのような表現をされていますが、入力例は"oxoxox" と1行のみです。複数行あるのですか?
(2) java1とjava2、2つのコードをご提示されていますが、どちらを直したいのでしょうか?
ご回答ありがとうございます。
デバッグはしていなかったです。
System.out.println()を要所要所に記載して実行するという認識でよろしいでしょうか。
質問する前にまずデバッグをしてみることは基本中の基本です。
System.out.println(変数名);
で変数の中身が想定通りか確認したり、
System.out.println("1");
のように目印を入れてみてコンソールに何が出力されるかで大まかな処理の流れを理解することができますよね。
なんと。そりゃ先にご自分でデバッグしないと。そうでないと何か動かないんで教えて、との「作業依頼」になってしまいます。
@dodox86さん
ご回答ありがとうございます。
複数行ではなく1行のみ入力されます。
java1の方でお願いしてもよろしいでしょうか。
「お願いしてもよろしいでしょうか」
の前に、まずはデバッグですよ。
デバッグしてみて、動きを理解すれば自ずと修正方法も分かるはずです。
それでもわからなければ、具体的にわからないところを質問に追記して下さい。
あとコードが2つもあっては回答者としても分かりにくいです。
どっちが何を表しているのかなんてわからないので、質問に関係あるコードだけにしましょう。
まず、デバッグしましょう。
度々申し訳ありません。
ひとまず上記コードをデバッグします。
それでもわからなければ、結果参照後もう一度お聞きしてもよろしいでしょうか。
はい、質問が修正されれば追記にコメントした人にも通知が行きます。
ゆっくりでいいのでデバッグしてみてください。
そもそもこの2つ、どっちもコンパイルエラーになりますよね?
回答1件
あなたの回答
tips
プレビュー