解決方法教えてください!エラーが発生しています

このQ&Aのポイント
  • Genericsを使用したArrayListをループ処理する際、特定の行で「交換性がない型」というエラーが発生します。エラーの解決方法を教えてください。
  • プログラム中で、値が偶数の場合は-1をかけてから画面に表示し、奇数の場合はそのまま画面に表示する処理を行っていますが、エラーが発生してしまっています。どうしたら解決できるでしょうか?
  • JavaのプログラムでArrayListを使用し、値が奇数の場合はそのまま画面に表示し、偶数の場合は-1をかけてから画面に表示する処理を行っていますが、エラーが起きています。解決策を教えてください。
回答を見る
  • ベストアンサー

エラーを解決したいんですが。

// Genericsを用いたArrayListを使用し // ループ処理にはiteratorを使用しない。 // for文を使ってリスト中身が奇数の場合はそのまま画面表示。 // 偶数の場合は-1をかけてから画面表示。 import java.util.ArrayList; class Test{ public static void main(String[] args) { //GenericsのInteger型でArrayListのインスタンスを生成 ArrayList<Integer> array = new ArrayList<Integer>(); array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); for(int i=0; i<array.size(); i++) { Integer integer = array.get( i ); //もし値が偶数だったら if(integer % 2 == 0){ integer *= -1; System.out.println( integer ); } //(それ以外)もし値が奇数だったら else{ System.out.println( integer ); } } } } 上記のプログラムで、 >Integer integer = array.get( i ); の場所が、「交換性がない型」と言われ、エラーになってしまうんですが どうしたらいいですか?

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • aigaion
  • ベストアンサー率47% (287/608)
回答No.1

ぱっとみ問題がないように思えますね. 原因として考えられるのは,addでarrayに追加している値が1なのに Integer integer = array.get(i) では,Integerに代入しているということですね. array.add(new Integer(1)); とすると,回避できるかもしれません. このあたりは,ボクシングという機能で自動化されていたように思います. 使用されているJavaコンパイラのバージョンが何かは知りませんが 特にjavaのバージョンにこだわらないのであれば最新のバージョンでやれば 上記のコードそのままでもコンパイルが通ると思いますよ.

nisikidouk
質問者

お礼

おっしゃっていたようにコンパイル環境を新しくしたら通りました。 Javaのヴァージョンを更新しようと思います。 ありがとうございました。

関連するQ&A

  • ArrayListクラスのインスタンスの宣言について

    まず初めに一言。 今自分が使用している本は3年ぐらいのモノです。 なので、宣言の仕方が変わっているかもしれません。 その上で質問です。 まず、ソースコードを貼り付けます。(JSP) <%@ page language="java" contentType="text/html; charset=Shift_JIS" import=java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>配列の挿入、削除(ArrayList)</title> </head> <body> <% //配列を定義する ArrayList array = new ArrayList(); //値をセットする array.add("1111"); array.add("2222"); array.add("3333"); //配列の値を表示する for (int i=0; i<array.size(); i++) { System.out.println("<p>" + (i+1) + "番目:" + array.get(i)); } //値を挿入する array.add(2, "9999"); //3番目の値を削除する array.remove(2); //変更後の配列の値を表示する for (int i=0; i<array.size(); i++) { out.println("変更後" + (i+1) + "番目:" + array.get(i)); } %> </body> </html> ArrayListクラスのインスタンスの宣言はどこか間違っているでしょうか。 Eclipse曰く、 『ArrayListはraw型です。ArrayListの参照はパラメータ化する必要があります。』 という警告が表示されます。 エラーでは無いみたいなのですが、やはり警告されている状態を放っておくのはあまり気持ちいいモノではありません。 そこで、質問です。 この警告を消す方法はあるのでしょうか。 もし、あるのでしたら教えて頂けると幸いです。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • ArrayListクラスを利用するプログラムについて質問があるのですが。

    「Genericsを用いたArrayListを使用しループ処理にはiteratorを使用する。 という指定の下、 ArrayListのインスタンスを生成し次の5つの文字列を追加した後、 for文を使ってリストの中身を全て順番に画面表示したいんです。 "AA" "BB" "CC" "DD" "EE" --------------------------- import java.util.ArrayList; class TestA{ public static void main(String args[]) { ArrayList<String> array = new ArrayList<String>(); array.add("AA"); array.add("BB"); array.add("CC"); array.add("DD"); array.add("EE"); } } --------------------------- ここからよく解らないので教えていただけませんでしょうか?

    • ベストアンサー
    • Java
  • java.util.Comparatorのcompareメソッドの振る舞いについて

    はじめまして。 質問をさせていただきます。 以下のソースで、 =============================================================== import java.util.Comparator; import java.util.TreeSet; import java.util.Iterator; final class Demo { public static void main(String[] args) { TreeSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() { public int compare(Integer i,Integer j) { int result = i%2 - j%2; if(result==0) { result = i-j; } return result; } }); for(int i=0;i<10;i++) { set.add(10-i); } Iterator<Integer> it = set.iterator(); while(it.hasNext()) { System.out.println((Integer)it.next()); } } } ================================================================ 実行結果 ================================================================ 2 4 6 8 10 1 3 5 7 9 ================================================================ 偶数が最初に昇順で出力され、奇数が後から昇順で出力されている のですが、なぜこのような実行結果になるのかがわかりません。 どうかご教授お願いします。

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の作成について

    ArrayListで可変長配列を扱っているのですが、 2次元可変長配列を用いる必要が出てきたので、 下記のように変更したのですがうまくいきません。 何が悪いのか教えていただけませんでしょうか? ----------------------------------------- ArrayList cars=new ArrayList(); cars.add("フェラーリ"); cars.add("ポルシェ"); cars.add("メルセデスベンツ"); for(int i=0;i<cars.size();i++){  String str=(String)cars.get(i);  System.out.println(str);} ----------------------------------------- 上記から下記のように変更しました。 ----------------------------------------- ArrayList[] cars=new ArrayList[3]; cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){  String str=(String)cars[0].get(i);  System.out.println(str);} ----------------------------------------- エラーは「Exception in thread "main" java.lang.NullPointerException」です。 どうやら初期配列が10ではなく3となってしまっているようです。

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えてください!

    Genericsを使ってエラーの出ないようにするにはどうすればいいですか? import java.util.*; public class Sample{ public static void main(String[] args){ ArrayList ary = new ArrayList(); ary.add("Mac"); ary.add("Wiindows"); ary.add("Linux"); for(Object str:ary){ System.out.println((String)str); } } }

    • ベストアンサー
    • Java
  • StringクラスのcompareToメソッド

    ArrayListに登録した文字列を五十音順にソートしようと思いComparator を使用して 以下のようなサンプルプログラムを作ってみました。 ところが想定していたような {赤ちゃん、富士山、山口県}とはならず {富士山、山口県、赤ちゃん} というような結果になりました。 compare() の戻り値の部分を return ((String)arg1).compareTo((String)arg0); に変更しても{赤ちゃん、山口県、富士山} となり辞書の並びとは異なる結果になりました。 辞書順に並べるにはなにかよい方法はありますでしょうか。 public class compareTest { public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); String a = "赤ちゃん"; String b = "山口県"; String c = "富士山"; array.add(a); array.add(b); array.add(c); for(int i=0;i<array.size();i++) { System.out.println("ソート前=" + array.get(i)); } Collections.sort(array, new testComp()); for(int i=0;i<array.size();i++) { System.out.println("ソート後=" + array.get(i)); } } } public class testComp implements Comparator { public int compare(Object arg0, Object arg1) { return ((String)arg0).compareTo((String)arg1); } }

    • ベストアンサー
    • Java
  • 助けてください

    10は偶数で5の倍数です。 11は素数です。 12は偶数で6の倍数です。 13は素数です。 14は偶数で7の倍数です。 15は奇数で5の倍数です。 16は偶数で8の倍数です。 17は素数です。 18は偶数で9の倍数です。 19は素数です。 20は偶数で10の倍数です。 と出力させたいのですが、 H:\>java SuuNoSyurui 11は奇数で0の倍数です。 12は偶数で0の倍数です。 13は奇数で0の倍数です。 14は偶数で0の倍数です。 15は奇数で0の倍数です。 15は素数です。 16は偶数で0の倍数です。 17は奇数で0の倍数です。 17は素数です。 18は偶数で0の倍数です。 19は奇数で0の倍数です。 19は素数です。 20は偶数で0の倍数です。 -- Press any key to exit (Input "c" to continue) -- こうでてしまいます。 下のが立てたプログラムです。 public class SuuNoSyurui { public static void main(String[] args) { int i=1,j=2; int n1=10; int n2=20; int n=n2-n1; int baisu=0; for(i=1;i<=n;i++) { if (i%2==0){ System.out.println("\t"+(i+n)+"は偶数で"+baisu+"の倍数です。"); } else { System.out.println("\t"+(i+n)+"は奇数で"+baisu+"の倍数です。"); } for(j=3;j<=(i-2);j +=2) { if (((i-2)%j==0) && ((i-2)%2)==1){ System.out.println("\t"+(i+n)+"は素数です。"); } } } } }

  • Java。以下のソースをご覧下さい。

    配列ですが、現在の一覧表示を上位10件で表示したいのですが、教わって書いたソースのため、どう手をくわえればいいか分かりません・・・ ご教示お願いします。 //以下ソースです。ほぼ表示ロジックのみですが、足りなければ別途追記致します。 <前略> Iterator<String> ir = hsFlow.keySet().iterator(); while(ir.hasNext()){ ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(); list.addAll((new HashMap<String,Integer>(hsFlow)).entrySet()); Collections.sort(list,Collections.reverseOrder(new SampleSorter())); for(Map.Entry<String,Integer> m:list){ System.out.println(m.getKey()); System.out.println(m.getValue()); String f = ir.next(); Integer c = hsFlow.get(f); if(c==null) c = new Integer(0); System.out.println("回数"+f+":"+c.intValue()+"回"); //この回数表示の部分で回数の多い上位10件のみの表示にしたいと思っています。

    • ベストアンサー
    • Java
  • Listデータを重復せずにSetに格納したい

    お世話になっています。 以下のクラスがあるとき public class UserFormBean_2 { private int userNum; private String userId; private String password; public void setUserNum(int userNum) { this.userNum = userNum; } public int getUserNum() { return this.userNum; } public void setUserId(String userId) { this.userId = userId; } public String getUserId() { return this.userId; } public void setPassowd(String password) { this.password = password; } public String getPassword() { return this.password; } public String toString() { return this.userId; } } Listにこのクラスが格納されている場合、 userIdをキーに、userIdを重複せずに格納することは可能なのでしょうか? 実行ソースは以下です。 public class Run{ public static void main(String[] args){ Set ss = new HashSet(); List array2 = new ArrayList(); (データ1) UserFormBean_2 userFr = new UserFormBean_2(); userFr.setUserId("maki"); userFr.setPassowd("なつのおとしご"); array2.add(userFr); //仮に、先にSetに値を格納する ss.add(userFr); (データ2) userFr = new UserFormBean_2(); userFr.setUserId("sayaka"); userFr.setPassowd("motomiti"); array2.add(userFr); (データ3) userFr = new UserFormBean_2(); userFr.setUserId("neneko"); userFr.setPassowd("ゆずは!"); array2.add(userFr); (データ4) userFr = new UserFormBean_2(); userFr.setUserId("森の山手"); userFr.setPassowd("なつのおとしご"); array2.add(userFr); //仮にSetに値を格納する ss.add(userFr); (データ5) userFr = new UserFormBean_2(); userFr.setUserId("maki"); userFr.setPassowd("なつのおとしご"); array2.add(userFr); System.out.println("size:"+array2.size()); System.out.println("set_size:"+ss.size()); UserFormBean_2 uB = new UserFormBean_2(); UserFormBean_2 uf = new UserFormBean_2(); System.out.println(" -- set -- "); } } よろしくお願いします。 for( Iterator u=array2.iterator();u.hasNext(); ) { uB = (UserFormBean_2)u.next(); System.out.println(uB.getUserId()); for(Iterator s=ss.iterator();s.hasNext(); ) { uf = (UserFormBean_2)s.next(); System.out.println(uf.getUserId()); ss.add(uB); }

    • ベストアンサー
    • Java

専門家に質問してみよう