• 締切済み

List(integer)の比較

List(integer)をif文で評価した際に、 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer と怒られてしまいます。キャスト等が必要なのでしょうか? 原因と対処が知りたいです。 以下のような、使い方をしています。 ----- List<Integer> list; if(list.get(0) > 100){ } -----

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

みんなの回答

  • neuron-x
  • ベストアンサー率52% (139/266)
回答No.2

(listのインスタンス生成、値の追加部分をどう書いているか分かりませんが)この内容であれば、ClassCastExceptionは発生しないはずですよ。 そもそも、List<Integer>としているので、Integer系以外の値を入れようとするとコンパイルエラーになります。 ジェネリクスの無かった昔ならあり得た話ですが…。 if文で参照しているlistは、本当にList<Integer>のlistですか? 名前が同じだけで、実は違うインスタンスという可能性が考えられます。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

具体的にlistをどのように作っているのかわかりませんがエラーメッセージから判断するとlistの要素として入っているのがIntegerではなく実はStringになってるのでは? 例えば以下のようにすればコンパイルはできますが実行時には同様のエラーになりますよ。 List<String> strlist = new ArrayList<String>(); strlist.add("string"); Object obj = strlist; List<Integer> list = (List<Integer>)obj; for (Integer i : list) { System.out.println(i); }

関連するQ&A

  • Object[ ][ ]へのキャストについて

    こんにちは。 csvファイルのデータをQueryRunner.batchメソッドでインサートしたいのです。 以下のメソッドでcsvファイルから取り出したデータをカンマで区切り、 Object[][]の形で帰したいのですが、うまくいきません。 次のExceptionが発生してしまいます。 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String; どのようにしたら良いか、ご教授願えないでしょうか。 お願いします。 private Object[][] getParm(List dataList, int colCnt){ List parmList = new ArrayList(); String data; for(Iterator ite = dataList.iterator(); ite.hasNext(); ){ data = (String) ite.next(); //Stringをフィールド毎の配列に変換 String[] fieldList = new String[colCnt]; //データのカラム数分の配列を作成 String[] tempList = data.split(","); System.arraycopy(tempList, 0, fifieldList); } return (String[][]) parmList.toArray(); }

  • Integerについて

    class Sample5_7_Integer { /** * Integerクラスのメソッド */ public static void main(String[] args) { //String → int int i1 = Integer.parseInt(args[0]); //int型にすることにより計算可能 System.out.println(i1 + 100); //String → integer Integer i2 = Integer.valueOf(args[0]); System.out.println(i2); Integer i3 = new Integer(100); System.out.println(i2.equals(i3)); } } をEclipseで実行したところ、 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at benkyou.Sample5_7_Integer.main(Sample5_7_Integer.java:10) というエラーになってしまいます。 どなたか解決法をお願いします。

    • ベストアンサー
    • Java
  • サーブレットが上手く作動しません。

    下記のようなエラーが出ています。 エラー表示の意味が全く分からず、検索かけても解決できそうにないので質問しました。 HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; page.Sflow1.doGet(Sflow1.java:75) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) //ソースコードが必要でしたら別途記載いたします。 解決策などございましたらご教示お願いします。

    • ベストアンサー
    • Java
  • Listからのnull要素を削除方法は?

    次のリストに入っているnull要素を削除する方法をお教え下さい。  List<String> lst = new ArrayList<String>(); while (lst.remove(null)); や for (int i=0; i < lst.size();i++) {  if (lst.get(i) == null ) lst.remove(i); } ではException in thread "main" java.lang.UnsupportedOperationException が起こります。 2011 Nov. 27.

    • ベストアンサー
    • Java
  • JAVAでアプレットのエラー(eclipse)の意味が分かりません

     JAVAプログラムをeclipseで書いています。  新しくプロジェクトをパッケジエクスプローラに作成し、ドラッグアンドドロップでメモ帳で書いたソースコードを プロジェクト内に落とし込んでやりました。  実行すると、アプレットのウインドウは表示されるのですが、「Start アプレットは初期化されていません」 とウインドウに表示されます。  一体何が原因でしょうか。  コード自体にはエラーはなく、コンソールには、以下のようなコメントが出ていますが、エラーの意味が分かりません、 一体どういうことなのでしょうか。  このようなドラッグアンドドロップのやり方は間違っているのでしょうか。 java.lang.ClassCastException: JFrameTest cannot be cast to java.applet.Applet at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

    • ベストアンサー
    • Java
  • 2次元の配列となっているクラス(HashMap)から指定の要素を検索する方法

    HashMap[] seminar_list; seminar_list = dbControl.get_SEMINAR_LIST(); という形で以下のような表形式のデータをseminar_listにセットしました。 ------------------ ID CATEGORY 001 aaa 002 bbb 003 bbb ------------------ 1次元の配列であれば、配列の位置を検索できることを確認できましたが、2次元の場合はどのように検索を行えばよいのでしょうか? 行いたいことは、ID:001のCATEGORYの値 を取得するようなプログラムを作成したいと思っています。 以下のようなプログラムを作成しましたが、(1)のところでエラー (java.lang.ClassCastException)となってしまいました。 =========================================================================== Arrays.sort(seminar_list); (1) int seminar001_index = Arrays.binarySearch(seminar_list, "001"); (2) String cate001 = (String)seminar_list2[cate001_index].get("CATEGORY"); (3) =========================================================================== よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 2つのリストのマージ方法について

    2つのリストのマージ方法について 下記の要件を満たしたいと考えています。 ・リスト1・2をkeyをキーにマージしたい。  リスト1[0]:key=2, value1=b  リスト1[1]:key=3, value1=d  リスト1[2]:key=4, value1=e  ・  ・  ・  リスト2[0]:key=1, value2=A  リスト2[1]:key=2, value2=B  リスト2[2]:key=5, value2=F  リスト2[3]:key=6, value2=G  ・  ・  ・  ↓  リスト3[0]:key=1, value1=A, value=""  リスト3[1]:key=2, value1=b, value=B  リスト3[2]:key=3, value1=d, value=""  リスト3[3]:key=4, value1=e, value=""  リスト3[4]:key=5, value1="", value=F  リスト3[5]:key=6, value1="", value=G  ・  ・  ・ ・リスト1・2はkeyの昇順でソート済。各リスト内では重複しているkeyはない。 ・マージ後もkeyの昇順にしたい。 ・実際のリストはそれぞれ数万件~数十万件なので、パフォーマンスを考慮したい。 下記のように作成してみたのですが、無理やりやりました感があり、分かりづらくバグがありそうです。またループでnewもしてたりしてパフォーマンスも悪そうです。もっとスマートにパフォーマンスもよい方法がないでしょうか? int checkedCount = 0; for (int i = 0; i < list1.size(); i++) { String str1 = list1.get(i).get("key"); for (int j = checkedCount; j < list2.size(); j++) { Map<String, String> map3 = new HashMap<String, String>(); String str2 = list2.get(j).get("key"); if (str1.compareTo(str2) < 0) { if (i != list1.size() - 1) { map3.put("key", str1); map3.put("value1", list1.get(i).get("value1")); map3.put("value2", ""); list3.add(map3); break; } else { Map<String, String> map4 = new HashMap<String, String>(); map4.put("key", str2); map4.put("value1", ""); map4.put("value2", list2.get(j).get("value2")); list3.add(map4); } } else if (str1.compareTo(str2) == 0) { map3.put("key", str1); map3.put("value1", list1.get(i).get("value1")); map3.put("value2", list2.get(j).get("value2")); list3.add(map3); checkedCount = j + 1; break; } else { map3.put("key", str2); map3.put("value1", ""); map3.put("value2", list2.get(j).get("value2")); list3.add(map3); checkedCount = j + 1; } } }

    • ベストアンサー
    • Java
  • ArrayList::getメソッドは何で不便に作られている?

    ArrayList::getメソッドはObject型を返却しますよね。 そのため、たとえば、  ArrayList list = new ArrayList();  Integer aaa = new Integer();  list.add(aaa);  Integer aaa2 = (Integer)list.get(0); のように、Integerでリストに追加したものを取り出すのに わざわざIntegerでキャストしなければなりません。 なんで、こんな不便な仕様になっているのでしょうか?

    • ベストアンサー
    • Java
  • trim()メソッドの使用方法とキャストの仕方について

    こんばんは、今回はtrim()メソッドの使用方法とキャストの方法についてお伺い致します。 trimメソッドを使用して文字列の前後の空白を削除したいのですが、 通常 String str = " 「こんにちは」"; str = str.trim(); とコーディングしコンパイルして表示するとちゃんと「こんにちは」となるのすですが、これが ArrayList list = new ArrayList(); BufferedReader br= new BufferedReader(new FileReader(Test.txt); while((str = br.readLine()) !=null){ str = str.trim(); list.add(str); } br.close(); とコーディングしコンパイルは通るのですが、 「こんにちは」のままで"「"の前にある空白が削除されてません。 私なりに「型」の違いでが原因ではないかと思い、java.io.ArrayList型からjava.lang.String型へキャストしようとしているのですが、コンパイルエラーが出てしまします。 プログラムコードは ArrayList list = new ArrayList(); String s; s = (String)list; としています。 エラー内容は ScheduleControlCall.java:142: 変換できない型 出現: java.util.ArrayList 要求: java.lang.String s = (String)list; ^ エラー 1 個 となっています。 度々ですが、ご指導お願い致します。

    • ベストアンサー
    • Java
  • 配列の型判定の仕方

    メソッドの引数をObjectにして、その引数の型を判定しようとしています。 たとえば以下のような感じです。 String hoge(Object para) { if(para.equals(java.lang.Integer.class)) { return "intです"; } return "わかりません" } 上記は、int型なら判定できるメソッドですが、int[]やString[]を判定するためにはどうしたらよいのでしょうか? paraにint[]型の値が入ってきた場合、 para.equals(java.lang.Integer[].class) としてもtrueにはなりませんでした。 どうすればできるのか、ご教授いただけると幸いです。 手段がなければ、para.getClass().toString()をして出力される文字列で判定しようかと思っています。

    • ベストアンサー
    • Java

専門家に質問してみよう