質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Q&A

解決済

1回答

469閲覧

AOJの挿入ソートの問題がローカルではエラーとならないが、AOJではRuntime Errorとなってしまう

tofu0511

総合スコア6

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

0グッド

0クリップ

投稿2017/11/12 05:50

編集2017/11/12 06:16

###前提・実現したいこと
AOJ(Aizu Online Judge)にて挿入ソートの問題をScalaにて解いています。

以下が問題の詳細となります。
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_A&lang=jp

ローカル上では入力例に対して正しい出力ができているように見えるのですが、
AOJにて同じソースを提出するとRunTime Errorとなってしまいます。

詳細なエラーログが出力されないため問題の特定にとても苦しんでいます。
競技プログラミング自体初心者のため、初歩的なエラーかもしれませんが、問題の原因をご教授いただければと思います。
不足している情報などあれば、追加いたします。
よろしくお願いいたします。

###発生している問題・エラーメッセージ
入力例

6 5 2 4 6 1 3

出力例

5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6

以下がエラーの詳細ページになります。
イメージ説明

ローカルで実施した場合、以下のような出力になっています。

$ scalac InsertionSort.scala $ scala InsertionSort 6 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6

###該当のソースコード

scala

1object InsertionSort { 2 def main(args: Array[String]): Unit = { 3 val scanner = new java.util.Scanner(System.in) 4 val size = scanner.nextInt() 5 var arr = Array.empty[Int] 6 7 for(i <- (0 until size)) { 8 arr = arr :+ scanner.next().toInt // 配列の末尾に要素を追加する場合は:+を使う 9 } 10 11 insertionSort(arr,size) 12 13 scanner.close() 14 } 15 16 def insertionSort(a: Array[Int], n: Int) = { 17 var arr = a 18 for(i <- (0 until n)) { 19 var v = a(i) 20 var j = i - 1 21 22 while (j >= 0 && a(j) > v) { 23 arr(j + 1) = arr(j) 24 j -= 1 25 } 26 arr(j+1) = v 27 if(i > 0) { 28 trace(arr, n) 29 } 30 } 31 } 32 33 // 配列をスペース区切りで出力する 34 def trace(a: Array[Int], n: Int): Unit = { 35 for (i <- (0 until n)) { 36 print(a(i)) 37 print(" ") 38 } 39 print("\n") 40 } 41}

###補足情報(言語/FW/ツール等のバージョンなど)
ローカルのScalaのバージョン 2.12.4

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

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

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

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

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

guest

回答1

0

自己解決

諸々勘違いがありました。。

まずクラス名はMainとしないと実行されない仕様でした。

また出力の際の1行目が抜けていることに気がついておらず、入力した数字を出力としてカウントしていたためミスとなっていました。。

最終的には以下のコードでパスすることができました。

scala

1object Main { 2 def main(args: Array[String]): Unit = { 3 val scanner = new java.util.Scanner(System.in) 4 val size = scanner.nextInt() 5 var arr = Array.empty[Int] 6 7 for(i <- (0 until size)) { 8 arr = arr :+ scanner.next().toInt 9 } 10 11 insertionSort(arr,size) 12 13 scanner.close() 14 } 15 16 def insertionSort(a: Array[Int], n: Int) = { 17 var arr = a 18 for(i <- (0 until n)) { 19 var v = a(i) 20 var j = i - 1 21 22 while (j >= 0 && a(j) > v) { 23 arr(j + 1) = arr(j) 24 j = j - 1 25 } 26 arr(j+1) = v 27 28 println(arr.mkString(" ")) 29 } 30 } 31}

投稿2017/11/12 08:37

tofu0511

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問