みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

プログラミング学習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();
}
}
}
}

投稿日時 - 2017-01-27 18:20:06

QNo.9286574

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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
となるからです。これは先の説明の通りです

投稿日時 - 2017-01-30 14:36:07

お礼

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

投稿日時 - 2017-02-12 00:45:39

ANo.1

多分ここの課題でしょうか…
https://paiza.jp/learning/sort-number

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

投稿日時 - 2017-01-27 19:19:41

お礼

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

投稿日時 - 2017-01-29 00:35:25

あなたにオススメの質問