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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

キャスト

キャストとは、オブジェクトの型の変換が許可された場合に、明白に別の型への変換を行うプロセスのことです。

Q&A

解決済

1回答

3714閲覧

オブジェクト配列からのキャスト戻しができません。可変長引数:1つの配列:オブジェクトキャスト

gyro16

総合スコア89

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

キャスト

キャストとは、オブジェクトの型の変換が許可された場合に、明白に別の型への変換を行うプロセスのことです。

0グッド

0クリップ

投稿2016/11/14 09:39

###前提・実現したいこと
”無理をして”、可変長引数に1つの配列を渡そうとしていますが、オブジェクト配列からのキャスト戻しができません。

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

Main.java:44: error: incompatible types: Object[] cannot be converted to int[] if(obj instanceof int[]){ ^ Main.java:45: error: incompatible types: Object[] cannot be converted to int[] int[] d = (int[]) obj; ^ 2 errors

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

import java.util.*; public class Main{ private static final Scanner scan = new Scanner(System.in); static boolean flag = false; public static void main(String[] args){ int n = scan.nextInt(); int[] d = new int[6]; Dice[] dices = new Dice[n]; for(int i = 0; i < n ; i++){ for(int j = 0; j < 6; j++){ d[j] = scan.nextInt(); } Object objs = (Object) d; dices[i] = new Dice((Object) objs); } boolean ans = true; for(int i = 0; ans && i < n; i++){ for(int j = i + 1; j < n; j++){ if(dices[i].equals(dices[j])){ ans = false; break; } } } System.out.println(ans? "Yes" : "No"); } } class Dice{ int[] _d = new int[6]; public static final int TOP = 0, SOUTH = 1, EAST = 2, WEST = 3, NORTH = 4, BOTTOM = 5; // 定数 public Dice(Object... obj){ // コンストラクタ for(int i = 0; i < 6; i++){ if(obj instanceof int[]){ int[] d = (int[]) obj; _d[i] = d[i]; } } } public int[] showAll(){ return _d; } @Override public boolean equals(Object obj){ boolean result = false; Dice dice = (Dice) obj; for(int i = 0; i < 4; i++){ for(int j = 0; j < 4; j++){ if(Arrays.equals(showAll(), dice.showAll())){ result = true; break; } dice.rollEast(); } for(int j = 0; j < 4; j++){ if(Arrays.equals(showAll(), dice.showAll())){ result = true; break; } dice.rollNorth(); } if(Arrays.equals(showAll(), dice.showAll())){ result = true; break; } dice.rollRight(); } return result; } public void rollSouth(){ int tmp = _d[TOP]; _d[TOP] = _d[NORTH]; _d[NORTH] = _d[BOTTOM]; _d[BOTTOM] = _d[SOUTH]; _d[SOUTH] = tmp; } public void rollNorth(){ int tmp = _d[TOP]; _d[TOP] = _d[SOUTH]; _d[SOUTH] = _d[BOTTOM]; _d[BOTTOM] = _d[NORTH]; _d[NORTH] = tmp; } public void rollEast(){ int tmp = _d[TOP]; _d[TOP] = _d[WEST]; _d[WEST] = _d[BOTTOM]; _d[BOTTOM] = _d[EAST]; _d[EAST] = tmp; } public void rollWest(){ int tmp = _d[TOP]; _d[TOP] = _d[EAST]; _d[EAST] = _d[BOTTOM]; _d[BOTTOM] = _d[WEST]; _d[WEST] = tmp; } public void rollRight(){ int tmp = _d[SOUTH]; _d[SOUTH] = _d[WEST]; _d[WEST] = _d[NORTH]; _d[NORTH] = _d[EAST]; _d[EAST] = tmp; } }

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のコードで動きます

java

1import java.util.*; 2 3public class Main{ 4 private static final Scanner scan = new Scanner(System.in); 5 static boolean flag = false; 6 7 public static void main(String[] args){ 8 9 int n = scan.nextInt(); 10 int[] d = new int[6]; 11 Dice[] dices = new Dice[n]; 12 13 14 for(int i = 0; i < n ; i++){ 15 for(int j = 0; j < 6; j++){ 16 d[j] = scan.nextInt(); 17 } 18 Object objs = d; 19 dices[i] = new Dice((Object) objs); 20 } 21 22 boolean ans = true; 23 for(int i = 0; ans && i < n; i++){ 24 for(int j = i + 1; j < n; j++){ 25 if(dices[i].equals(dices[j])){ 26 ans = false; 27 break; 28 } 29 } 30 } 31 System.out.println(ans? "Yes" : "No"); 32 } 33} 34 35class Dice{ 36 37 int[] _d = new int[6]; 38 public static final int 39 TOP = 0, SOUTH = 1, EAST = 2, 40 WEST = 3, NORTH = 4, BOTTOM = 5; // 定数 41 42 public Dice(Object ...obj){ // コンストラクタ 43 for(int i = 0; i < 6; i++){ 44 if(obj[0] instanceof int[]){ 45 int[] d = (int[]) obj[0]; 46 _d[i] = d[i]; 47 } 48 } 49 } 50 51 public int[] showAll(){ 52 return _d; 53 } 54 55 @Override 56 public boolean equals(Object obj){ 57 boolean result = false; 58 Dice dice = (Dice) obj; 59 for(int i = 0; i < 4; i++){ 60 for(int j = 0; j < 4; j++){ 61 if(Arrays.equals(showAll(), dice.showAll())){ 62 result = true; 63 break; 64 } 65 dice.rollEast(); 66 } 67 for(int j = 0; j < 4; j++){ 68 if(Arrays.equals(showAll(), dice.showAll())){ 69 result = true; 70 break; 71 } 72 dice.rollNorth(); 73 } 74 if(Arrays.equals(showAll(), dice.showAll())){ 75 result = true; 76 break; 77 } 78 dice.rollRight(); 79 } 80 return result; 81 } 82 83 public void rollSouth(){ 84 int tmp = _d[TOP]; 85 _d[TOP] = _d[NORTH]; 86 _d[NORTH] = _d[BOTTOM]; 87 _d[BOTTOM] = _d[SOUTH]; 88 _d[SOUTH] = tmp; 89 } 90 91 public void rollNorth(){ 92 int tmp = _d[TOP]; 93 _d[TOP] = _d[SOUTH]; 94 _d[SOUTH] = _d[BOTTOM]; 95 _d[BOTTOM] = _d[NORTH]; 96 _d[NORTH] = tmp; 97 } 98 99 public void rollEast(){ 100 int tmp = _d[TOP]; 101 _d[TOP] = _d[WEST]; 102 _d[WEST] = _d[BOTTOM]; 103 _d[BOTTOM] = _d[EAST]; 104 _d[EAST] = tmp; 105 } 106 107 public void rollWest(){ 108 int tmp = _d[TOP]; 109 _d[TOP] = _d[EAST]; 110 _d[EAST] = _d[BOTTOM]; 111 _d[BOTTOM] = _d[WEST]; 112 _d[WEST] = tmp; 113 } 114 115 public void rollRight(){ 116 int tmp = _d[SOUTH]; 117 _d[SOUTH] = _d[WEST]; 118 _d[WEST] = _d[NORTH]; 119 _d[NORTH] = _d[EAST]; 120 _d[EAST] = tmp; 121 } 122}

投稿2016/11/14 10:18

編集2016/11/14 10:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問