• 締切済み

プログラミング学習paizaの数の並び替え問題

Eclipseでは上手く並び替え表示されるのですが、paizaで同じコードを提出しても、提出前動作確認でコード実行結果がWrong Anserでエラーになります。原因が分かりません。使用言語はJavaです。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); ArrayList<Integer> n_ = new ArrayList<>(); n_.add(null); while (line != null) { if (line.equals("")) { for (int a = 1; a< n_.size()-1; a++) { for (int j = a + 1; j < n_.size(); j++) { if (n_.get(a) > n_.get(j)) { int w = n_.get(a); n_.set(a, n_.get(j)); n_.set(j, w); } } } for (int k = 1; k < n_.size(); k++) { System.out.println(n_.get(k)); } break; }else{ int i = Integer.parseInt(line); n_.add(i); line = br.readLine(); } } } }

みんなの回答

  • HNEX
  • ベストアンサー率62% (43/69)
回答No.2

課題は先に指定したURLのもので合っている、と仮定して追加回答させて頂きます 「一行目は入力される値の総数が入ってきますので、この値をソートの対象に含めてはいけません」 ページで例に示されている入出力を見てください 入力例1 5 3 5 19 1 2 出力例1 1 2 3 5 19 入力の一番最初の「5」はこの後入ってくる数字の総数を示したもので、出力に加えてはいけません。 「一行目の数値を元に取得する回数を制限する方が正確かと思います」 whileで読みこめるまで読むのでもまぁ問題はないのですけど、回数を入力値として入力されるので、その数値を利用して取得した方が安全ではないか、という話です paizaでのコード実行結果がWrong Anserになる理由ですが、終了時の判定がおかしいので出力がされていません。 if (line.equals(""))がtrueになる事がないからだと思われます。 ソートと出力の処理をwhileの外に出すべきでしょう それで出力がされるようになりますが、まだエラーのままになるはずです 入力 5 3 5 19 1 2 に対して出力が 1 2 3 5 5 19 となるからです。これは先の説明の通りです

kenken235
質問者

お礼

ありがとうございます。ぼけていました。早速やってみようと思います。重ねてありがとうございます。

  • HNEX
  • ベストアンサー率62% (43/69)
回答No.1

多分ここの課題でしょうか… https://paiza.jp/learning/sort-number 入力値の使い方が間違っていますね 一行目は入力される値の総数が入ってきますので、この値をソートの対象に含めてはいけません 一行目の数値を元に取得する回数を制限する方が正確かと思います 後はこだわりが無ければソートはCollections.sortを使った方が良いと思います 入力値の取得はScannerを使うと楽になります

kenken235
質問者

お礼

回答ありがとうございます。「一行目は入力される値の総数が入ってきますので、この値をソートの対象に含めてはいけません」と「一行目の数値を元に取得する回数を制限する方が正確かと思います」の所の意味がよくわかりません。ちなみに、paizaの実行結果ステータスはRuntime error で、実行時エラーメッセージには必ず最後の方のline = br.readLine();の行が示されます。

関連するQ&A