• 締切済み

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

  • Java
  • 回答数2
  • ありがとう数3

みんなの回答

  • 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

  • ArrayListを利用する問題

    問題 1.ArrayListのオブジェクトを生成する。 2.「何回入力しますか?」と出力し、標準入力をおこなう。 3.2で入力した回数分、以下の処理を繰り返す。 「n個目の値を入力してください」と出力し、標準入力を行う。(n=ループ回数) 入力された値をArrayListへ格納する。 4.ArrayListのサイズ分、以下の処理を繰り返す。 ArrayListより値を取得する。 取得した値を出力する。 結果 何回入力しますか? 3 1個目の値を入力してください。 hoge 2個目の値を入力してください。 poyo 3個目の値を入力してください。 hoo hoge poyo hoo 自分で書いたプログラム 1 import java.util.ArrayList; 2 import java.io.*; 3 4 class ArrayList2{ 5 public static void main(String[] args) throws IOException{ 6 7 ArrayList list = new ArrayList(); 8 list.add(n); 9 10 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 11 12 System.out.println("何回入力しますか?"); 13 14 String str = br.readLine(); 15 16 int num = Integer.parseInt(str); 17 18 for(int i = n ; i < num; i++){ 19 System.out.println("n個目の値を入力してください。"); 20 21 String str1 = br.readLine(); 22 23 } 24 } 25 } どうもうまくいきませんので教えて下さい。

  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • 九九を横に表示する。

    入力した整数までの九九を 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 以下略 のように表示したいのですが 私の作ったプログラムだと縦に表示されてしまいます。 1 2 3 4 5 6 7 8 9 のように。(-"-;A ... プログラムは以下の通りです。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class q07quiz07 { /** * @param args */ public static void main(String[] args)throws IOException { // TODO 自動生成されたメソッド・スタブ System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int i , j; i = 1; while(i <= num){ j = 1; while(j <= 9){ System.out.println(i*j+ " "); j++; } System.out.println(); i++; } } } 回答よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのプログラミング(連続する整数の和)

    javaのプログラミング(連続する整数の和) 大学で出た課題です。 「ある自然数nを入力し、n=○+○+…+○と連続する整数の和で表すプログラミングをつくれ。」というものです。 以下に、私が考えたものを載せます。これだと連続する2つの整数の和では表すことができるのですが、3つ以上の整数の和を表すことができません。どうすればよいでしょうか? import java.io.*; public class  n { public static void main(String[] args) { int n; BufferedReader rd = new BufferedReader(new InputStreamReader(System.in)); try{ String line; System.out.print("整数:"); line = rd.readLine(); n = Integer.parseInt(line); } catch(IOException e){ System.out.println("入力エラーが発生しました。"); return; } catch(NumberFormatException e){ System.out.println("整数を入力してください。"); return; } for(int i=1;i<=n;i++){ int k=i+1; if(i+k==n) System.out.println(i+"+"+k); } } }

  • 配列の初期化に関する問題で・・・

    Javaのプログラミングの問題で、下記のような問題が出ました。 要素数が10のint型配列aの各要素を順に3,12,7,20,15,5,8,18,10,16で初期化し、 キーボードから入力された値が配列の何番目に格納されているかを表示するプログラムを作成してください。 ただし、データが配列の中に存在しない場合は「○○は見つかりませんでした」と表示してください。 「if文を使って場合分けする」というヒントがありましたが よくわかりません。 下記のように考えてみたのですが、思うようになりません。 教えて頂けたらと思います。 import java.io.*; public class renshu { public static void main(String[] args)throws IOException { int a[]={3,12,7,20,15,5,8,18,10,16}; int n; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("探索する数字を入力してください>"); n=Integer.parseInt(br.readLine()); a=Integer.parseInt(br.readLine()); switch(a){ case 3: System.out.print(a+"はa[1]に格納されています。"); break; case 12: System.out.print(a+"はa[2]に格納されています。"); break; case 7: ~~~~~(省略) break; default; System.out.print(a+"は見つかりませんでした。") } } }

    • ベストアンサー
    • Java
  • doubleで入力するには?

    はじめまして。 Javaの勉強をはじめたばかりです。 質問のしかたが正しいのかもちょっと自信がないのですが、 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); っていうのがありますよね? これの『int』のところを『double』で入力できるように するにはどうすればいいのでしょうか? すごい初心者な質問で申し訳ないですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • javaの配列とファイル読み込みについて。

    javaでゲームを作っておりマップの読み込みでつまってしまったので 質問させてもらいます。 try { BufferedReader br = new BufferedReader( new InputStreamReader(getClass().getResourceAsStream(filename))); // rowを読み込む String line = br.readLine(); row = Integer.parseInt(line); // colを読む line = br.readLine(); col = Integer.parseInt(line); // マップサイズを設定 width = col * CS; height = row * CS; // マップを作成 map = new int[row][col]; for (int i=0; i<row; i++) { line = br.readLine(); for (int j=0; j<col; j++) { map[i][j] = Integer.parseInt(line.charAt(j) + ""); } } } catch (Exception e) { e.printStackTrace(); } これなんですがreadLine()は1行読み込むと見たんですが、 多分ファイルに改行がないために最初から最後まで読み込めたんじゃないかとおもいます。でもそのあとの配列へ入れるやり方がよくわかりません。どうなっているんでしょうか? よろしくお願いします。 ちなみに参考にさせてもらっているページは http://javagame.skr.jp/index.php?%A5%DE%A5%C3%A5%D7%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF です。

    • ベストアンサー
    • Java
  • ArrayListを使ったクラスの作成の仕方

    次のプログラム、どこが間違っているのでしょうか? コンパイルは通るのですが、実行しようとすると ずら~っとエラーが出てしまいます。 (例)at java.lang.ClassLoader.defineClass1(Native Method) at java.security.SecureClassLader.defineClass..... at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) ********************************************************** package siryou; import java.util.ArrayList; import java.io.*; class Info { private String name; private String age; private String nationality; public void setName(String nm) { name = nm; } public void setAge(String a) { age = a; } public void setNationality(String nt) { nationality = nt; } public void show(String j) { System.out.println("「名前=" + name + "」"); System.out.println("「年齢=" + age + "」"); System.out.println("「国籍=" + nationality + "」"); } } class Kojinjyoho02 { public static void main(String args[])throws IOException { System.out.println("何回入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); Info in = new Info(); ArrayList list = new ArrayList(); for(int i =0; i < res; i++){ System.out.println("名前は?"); str = br.readLine(); in.setName(str); System.out.println("年齢は?"); str = br.readLine(); in.setAge(str); System.out.println("国籍は?"); str = br.readLine(); in.setNationality(str); list.add(in); } for(int j=0; j < list.size(); j++){ String jyoho = (String)list.get(j); in.show(jyoho); } } }

    • ベストアンサー
    • Java
  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • コンパイル後のエラー。

    こんにちは、質問があります。 下のプログラムを組みました。 コンパイルには成功しましたが、実行することができません。 import java.io.*; public class Gyouretu { public static void main(String[] args) { BufferedReader reader = new BufferedReader( new InputStreamReader(System.in), 1); try{ System.out.println("行列数を入力"); String line = reader.readLine(); int n = Integer.parseInt(line); int a[][] = new int[n][n]; int b[][] = new int[n][n]; int c[][] = new int[n][n]; int i,j,k; for ( i = 0; i < n; i++){ for ( j = 0; j < n; j++){ c[i][j]=0; for ( k = 0; k < n; k++){ c[i][j] += a[i][k] * b[k][j]; System.out.print(c); System.out.print(i); System.out.print(j); } } } }catch (IOException e){ System.out.println("end"); } } } 行列の計算をするプログラムなのですが、コンパイル後に行列数(何行何列か?)を入力するとこんなエラーが出ます。 「'2' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 なぜなのか、どうしてもわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java