• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:arraycopyメソッド)

Stringのarraycopyメソッドの使い方とArrayStoreExceptionについて

このQ&Aのポイント
  • Stringのarraycopyメソッドを使用すると、指定した要素範囲の値を別の配列にコピーすることができます。
  • しかし、配列要素の型が異なる場合にはArrayStoreExceptionが発生します。
  • 質問の例では、String型の配列aをString型の配列bにコピーしていますが、配列要素の型が異なるために例外が発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

探してみたところ改訂版の方の正誤表にありました。 いちおう修正はされているようです。 しかしこの修正もどうかと思いますね。 むりやり解答に辻褄をあわせたような…。

参考URL:
http://www.seshop.com/book/errata/Default.asp?mode=detail&pid=3663&printno=1&pageno=all
azicyan
質問者

補足

お手数おかけします すみません、僕は見つけられなかったです。 申し訳ないです。 それにしても、誤植というより、 完全な間違いですね・・・

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

>aとbがStringだから悪いのでしょうか?? そうです。仕様では配列以外には使えないことになっています。 だからString型を与えて例外が発生するのは正常の筈です。 よろしければ問題集の書名と問題箇所をお教えください。

azicyan
質問者

補足

ありがとうございます。 そうですよね・・・ いまgoogleで、いろいろ調べたところ、やはり配列で説明されている方がいまして・・・おかしいなあ、と思いました・・・ sun教科書 Java2[310-035]  翔泳社 のp208ページ8-5の問題です。 実は翔泳社の掲示板にかなりの質問があったり、 大量の正誤表があったりで・・・ ちょっとこの本が信用できません・・・ とりあえず、正誤表にこのページの事が無かったので質問してみました・・・。 私も自信が無いので・・・。 ちなみに前のページなんですが String args = new StringBuffer().append("a").append("b"),append("c").toString(); これも間違いですよね・・・ append("c")の前は"."ですよね・・・ このような単純な間違えがとにかく多いのです・・・ 初版という訳でもないのに・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • formatメソッドについて

    こんばんは。皆様、今回も宜しくお願い致します<(_ _)> 例えば1という値を渡したら、「001」というように表示させてたくて、下記のようなソースを作成してみました。 import java.text.*; class Main{ public static void main(String args[]){ DecimalFormat fmt = new DecimalFormt(); fmt.setMaximumIntegerDigits(3); fmt.setMinimumIntegerDigits(3); String str = fmt.format(1); System.out.println(str); } } これを実行すると「001」というように、私の希望通りに表示されます。 でも String str = fmt.format(1); の部分を String str = fmt.format("1"); と変更すると下記のエラーが出力されます。 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format giv en Object as a Number at java.text.NumberFormat.format(NumberFormat.java:219) at java.text.Format.format(Format.java:133) at Main.main(Main.java:8) そこでJavaのリファレンスを見て、疑問を持ちました。 リファレンスにはFormatクラスのformatメソッドの引数はオブジェクトになってます。 ということはむしろエラーになったほうが正しくて(String=オブジェクトだから)、普通に実行できたほうがおかしいんじゃないか?(数値=基本型だから)と思ったのです。 どうしてエラーがでるのか、どうしてオブジェクトを渡していないのに普通に実行できるのか、わかる方がいらっしゃったら教えて下さい。 宜しくお願い致します<(_ _)>

    • ベストアンサー
    • Java
  • 計算クラスのメソッドについて

    <問題> Mainクラス mainメソッド 1)実行時に引数を2つ付けて実行する。(数字) 2)計算クラスのオブジェクトを生成。 3)argsの0番目と1番目から値を取得し、int型に変換する。 4)int型に変換した値2つを引数として、計算クラスの足し算メソ   ッドを実行し、戻り値を取得して表示する。 計算クラス 足し算メソッド(引数=int,int) 1)int型の数字を引数として2つ受け取る。 2)二つの引数の値を足し算する。 3)計算した値を戻り値とする。 *********************************************************** 上記の問題についての質問です。 最初mathくらすのメソッドを使うのかと思ったのですが、 足し算を計算するようなメソッドが無かったのでネットで検索 して見つけたcalcAdd()というメソッドを使って記述してみました。 でも「シンボルを見つけられません」のエラーが出てコンパイル 出来ないし、メソッドの使い方も違うような気がするので、 分かる方正しい記述の仕方を教えてください。 package siryou; class Keisan { int cal; int cul; public int tashizan(int a, int u) { cal = a; cul = u; int kekka = (Integer)calcAdd(cal, cul, 0); return kekka; } } class TashiHikiKakeWari { public static void main(String args[]) { Keisan ki = new Keisan(); String str1 = args[0]; String str2 = args[1]; int res1 = Integer.parseInt(str1); int res2 = Integer.parseInt(str2); ki.tashizan(res1, res2); int kekka = ki.tashizan(res1, res2); System.out.println(kekka); } } ************************************************************ calcAdd()メソッドの呼び出し方も間違っている気がするのですが、 そもそもこのメソッドって呼び出せば自動的に計算されるように なっているのですか? それとも足し算を計算する記述は別にしなければならないのでしょうか?

    • ベストアンサー
    • Java
  • uasort()でクラスのメソッドは呼べますか?

    2次元連想配列の指定項目をソートするのに、uasort()を使いたいのですが、 uasort()で指定する関数に任意の引数は渡せず、固定の項目しかソートできません。 uasort($rensouArray,"comparar"); 関数ではなくクラスのメソッドが指定できば引数を渡せなくてもクラスのプロパティで渡せると思いましたが、 以下の書き方ではクラスのメソッドは呼べませんでした。 uasort($rensouArray,$this->$comparar()); http://jp.php.net/manual/ja/function.uasort.php の注意書きで、関数名の代わりに、オブジェクトへのリファレンスを格納した配列とメソッド名を指定することも出来ます。とありますが、書き方がわからず困っています。

    • 締切済み
    • PHP
  • javaのmainの引数はなぜstring[]?

    Java初心者です。 基礎的なことなのですが、質問させてください。 javaのmainメソッド定義の public static void main (String[] args) について、String[] argsの部分がjavaコマンドで実行する際に与える引数であることは 理解できました。しかし、なぜStringの配列なのかが理解できません。 実行時の引数であれば、intやdoubleも使い道があるようにも感じるので、 プログラマの好きに定義できた方が便利な気がしますし、実行時に引数を与えないなら public static void main () としてしまったほうがわかりやすいとも感じてしまいます。 実はコンパイル時や実行時に裏の見えない部分でStringの配列を使っているとか、 何か理由があるのでしょうか? mainの定義は main (String[] args)と暗記でもいいのですが、 気になったので知りたく、質問させてください。

    • ベストアンサー
    • Java
  • 型の種類に関係なく配列かどうかを調べたい

    C# 2010 version 4.0を使用しています。 例えば以下のコードでは、 object o = new int[]{1, 2}; if (o is int[]) { Console.WriteLine("配列"); } 「o is int[]」 と調べれば良いのですが、 object o がstring型の配列だろうが object o = new string[]{“a”, “b”}; object o がdouble型の配列だろうが object o = new string[]{1.1, 1.2}; とにかく配列かどうかを調べるやり方なり関数はあるのでしょうか? やはり object o = new string[]{"a", "b"}; if (o is int[]) { Console.WriteLine("配列"); } else if (o is string[]) { Console.WriteLine("配列"); } このように調べる方法しかないのでしょうか?

  • 配列から指定した値を取得する関数

    $itemから["a"]の値だけを取り出した配列を呼び出す関数を作成したいのですが、この様な配列の場合はどうしたら良いのでしょうか? $item var_dump( $item ); array(1) { [0]=> object(data)#1 (5) { ["a"]=> int(1) ["b"]=> string(1) "2" ["c"]=> string(7) "string1" ["d"]=> string(7) "string2" ["e"]=> string(8) "keyword1" } [1]=> object(data)#2 (5) { ["a"]=> int(3) ["b"]=> string(1) "4" ["c"]=> string(7) "string3" ["d"]=> string(7) "string4" ["e"]=> string(8) "keyword2" } }

    • ベストアンサー
    • PHP
  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • System.arraycopyの問題

    いつもお世話になります。 あるWeb上の記事で、配列コピーのメソッドで、Arrays.copyOfメソッドの紹介をする際、それと比較する形で、System.arraycopyメソッドについて以下の記述をしていました。 「しかし、System.arraycopyメソッドにはダウンキャストが必須だという問題があります。」 ダウンキャストが何をするのかは分かっています。 しかし、特段そのようなことはしなくても、同じ型の配列を用意し、コピーを行うことはできます。 例) String[] s1 = {"aa", "bb"}; String[] s2 = new String[s1.length]; System.arraycopy(s1, 0, s2, 0, s1.length); ここでいう問題が分かりませんでした。具体的に何を問題と言いたいのでしょうか。 宜しくお願い致します。

  • メソッドのオーバーライド(java)

    class A3{ void hello(){ System.out.println("A3"); } void hello(int i){ System.out.println("A3"+i); } } class B3 extends A3{ void hello(){ System.out.println("B3"); } } class C3 extends B3{ void hello(String s){ System.out.println("C3"+s); } } class MethodOverriding3{ public static void main(String args[]){ A3 obj = new C3(); obj.hello(); } } 上のプログラムを実行すると"B3"と表示されまが、どうしてクラスBのメソッドが実行されるのでしょうか? クラスAのメソッドが無視される仕組みがわかりません。 また、クラスMethodOverriding3でobj.hello("abc")としてコンパイルすると mo.java:25: シンボルを見つけられません。 シンボル: メソッド hello(java.lang.String) 場所 : A3 の クラス obj.hello("abc");   ^ エラー 1 個 とエラーが出ます。 どうしてでしょうか? 誰か教えてください、お願いします。

    • ベストアンサー
    • Java
  • Excel2003でworksheetクラスのCopyメソッドが失敗し

    Excel2003でworksheetクラスのCopyメソッドが失敗しました。 という表示がでて全く原因がわからず困っています。 詳細は ThisWorkbook.Worksheets("請求書・原本").Copy Before:=Worksheets(sheetname2) の箇所でエラーが発生します。 発生する場所はたまに変わります。 すぐ上のプロシージャで実行している同じようなステートメントは問題なく実行されるのですが、 急に同じ構文の箇所で発生しているので全く理由がわかりません。 変数で設定しているシート名は確実に存在しています。 コードは以下のとおりです。 Function fncPrtCon2(ByVal sheetname As String, ByVal siki As String, ByVal mainScr As String, ByVal i As Long) '【変数】 Dim wDate As Date '日付入力用変数 Dim xDate As Date Dim work As String '日付フォーマット用 Dim sheetname2 As String ThisWorkbook.Worksheets("明細・原本").Copy Before:=Worksheets("明細・原本") sheetname = sheetname & "・" & Worksheets(mainScr).Cells(i + 1, 6).Value & "・明細" ActiveSheet.Name = sheetname sheetname2 = sheetname (中略)   '原本シートコピー ThisWorkbook.Worksheets("請求書・原本").Copy Before:=Worksheets(sheetname2) sheetname = Replace(sheetname, "・明細", "") ActiveSheet.Name = sheetname End Function 上記コードはサブモジュールでメインから各引数を値渡ししています。 Copyメソッドの引数を省略して実行すると成功します。 どこか問題のある箇所があるでしょうか。 助言お願いします。