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

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

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

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

Q&A

解決済

1回答

7558閲覧

クラス型配列のフィールドにアクセスしたいです。

gyro16

総合スコア89

Java

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

0グッド

0クリップ

投稿2016/11/13 04:20

編集2016/11/13 05:20

###前提・実現したいこと
サイコロが同じかどうかをチェックするプログラムです。
サイコロがn個与えられ、サイコロ各面に任意の数字が割り振られます。
サイコロDiceは_d[6]を持ち、サイコロはn個なのでDice[n]とクラス型配列にします。

1つ目
Dice[i]._d[j] = d[j];
これができません。サイコロのフィールド配列_dにアクセスしたいです。

2つ目
flag = checkSameDice(Dice[j], Dice[j - 1]);

こちらもシンボルが見つかりません。

各サイコロを同じかどうか判定して同じものがある場合、Noと表示、
すべて異なる場合Yesと表示します

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

Main.java:16: error: cannot find symbol Dice[i]._d[j] = d[j]; ^ symbol: variable Dice location: class Main Main.java:22: error: cannot find symbol flag = checkSameDice(Dice[j], Dice[j - 1]); ^ symbol: variable Dice location: class Main Main.java:22: error: cannot find symbol flag = checkSameDice(Dice[j], Dice[j - 1]); ^ symbol: variable Dice location: class Main 3 errors

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

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 for(int i = 0; i < n; i++){ 14 for(int j = 0; j < 6; j++){ 15 d[j] = scan.nextInt(); 16 Dice[i]._d[j] = d[j]; 17 } 18 } 19 20 for(int i = 0; i < n - 1; i++){ 21 for(int j = n - 1; j > i; j--){ 22 flag = checkSameDice(Dice[j], Dice[j - 1]); 23 if(flag == true)break; 24 } 25 if(flag == true)break; 26 } 27 System.out.println(flag? "No" : "Yes"); 28 } 29 30 public static boolean checkSameDice(Dice diceA, Dice diceB){ 31 flag = false; 32 for(int i = 0; i < 4; i++){ 33 for(int j = 0; j < 4; j++){ 34 flag = Arrays.equals(diceA._d, diceB._d); 35 if(flag == true)break; 36 diceB.rollEast(); 37 } 38 for(int j = 0; j < 4; j++){ 39 flag = Arrays.equals(diceA._d, diceB._d); 40 if(flag == true)break; 41 diceB.rollSouth(); 42 } 43 flag = Arrays.equals(diceA._d, diceB._d); 44 if(flag == true)break; 45 diceB.rollRight(); 46 } 47 return flag; 48 } 49} 50 51class Dice{ 52 53 int[] _d = new int[6]; 54 public static final int 55 TOP = 0, SOUTH = 1, EAST = 2, 56 WEST = 3, NORTH = 4, BOTTOM = 5; // 定数 57 58 public Dice(int[] d){ // コンストラクタ 59 for(int i = 0; i < 6; i++){ 60 _d[i] = d[i]; 61 } 62 } 63 64 public void rollSouth(){ 65 int tmp = _d[TOP]; 66 _d[TOP] = _d[NORTH]; 67 _d[NORTH] = _d[BOTTOM]; 68 _d[BOTTOM] = _d[SOUTH]; 69 _d[SOUTH] = tmp; 70 } 71 72 public void rollNorth(){ 73 int tmp = _d[TOP]; 74 _d[TOP] = _d[SOUTH]; 75 _d[SOUTH] = _d[BOTTOM]; 76 _d[BOTTOM] = _d[NORTH]; 77 _d[NORTH] = tmp; 78 } 79 80 public void rollEast(){ 81 int tmp = _d[TOP]; 82 _d[TOP] = _d[WEST]; 83 _d[WEST] = _d[BOTTOM]; 84 _d[BOTTOM] = _d[EAST]; 85 _d[EAST] = tmp; 86 } 87 88 public void rollWest(){ 89 int tmp = _d[TOP]; 90 _d[TOP] = _d[EAST]; 91 _d[EAST] = _d[BOTTOM]; 92 _d[BOTTOM] = _d[WEST]; 93 _d[WEST] = tmp; 94 } 95 96 public void rollRight(){ 97 int tmp = _d[SOUTH]; 98 _d[SOUTH] = _d[WEST]; 99 _d[WEST] = _d[NORTH]; 100 _d[NORTH] = _d[EAST]; 101 _d[EAST] = tmp; 102 } 103}

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

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
'''java
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(); } dices[i] = new Dice(d); } for(int i = 0; i < n - 1; i++){ for(int j = n - 1; j > i; j--){ flag = checkSameDice(dices[j], dices[j - 1]); if(flag == true)break; } if(flag == true)break; } System.out.println(flag? "No" : "Yes"); } public static boolean checkSameDice(Dice diceA, Dice diceB){ flag = false; for(int i = 0; i < 4; i++){ for(int j = 0; j < 4; j++){ flag = Arrays.equals(diceA._d, diceB._d); if(flag == true)break; diceB.rollEast(); } for(int j = 0; j < 4; j++){ flag = Arrays.equals(diceA._d, diceB._d); if(flag == true)break; diceB.rollSouth(); } flag = Arrays.equals(diceA._d, diceB._d); if(flag == true)break; diceB.rollRight(); } return flag; }

}

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(int[] d){ // コンストラクタ for(int i = 0; i < 6; i++){ _d[i] = d[i]; } } 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; }

}
'''

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のコードで動きます
変数をクラスの名前自体にしていたのと
クラス変数配列にインスタンスを入れていなかったのが原因ではないでしょうか

java

1import java.util.*; 2 3public class Main6{ 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 for(int i = 0; i < n; i++){ 14 dices[i]=new Dice(); 15 for(int j = 0; j < 6; j++){ 16 d[j] = scan.nextInt(); 17 dices[i]._d[j] = d[j]; 18 } 19 } 20 21 for(int i = 0; i < n - 1; i++){ 22 for(int j = n - 1; j > i; j--){ 23 flag = checkSameDice(dices[j], dices[j - 1]); 24 if(flag == true)break; 25 } 26 if(flag == true)break; 27 } 28 System.out.println(flag? "No" : "Yes"); 29 } 30 31 public static boolean checkSameDice(Dice diceA, Dice diceB){ 32 flag = false; 33 for(int i = 0; i < 4; i++){ 34 for(int j = 0; j < 4; j++){ 35 flag = Arrays.equals(diceA._d, diceB._d); 36 if(flag == true)break; 37 diceB.rollEast(); 38 } 39 for(int j = 0; j < 4; j++){ 40 flag = Arrays.equals(diceA._d, diceB._d); 41 if(flag == true)break; 42 diceB.rollSouth(); 43 } 44 flag = Arrays.equals(diceA._d, diceB._d); 45 if(flag == true)break; 46 diceB.rollRight(); 47 } 48 return flag; 49 } 50} 51 52class Dice{ 53 54 int[] _d = new int[6]; 55 public static final int 56 TOP = 0, SOUTH = 1, EAST = 2, 57 WEST = 3, NORTH = 4, BOTTOM = 5; // 定数 58 59 public Dice(){ 60} 61 62 public Dice(int[] d){ // コンストラクタ 63 for(int i = 0; i < 6; i++){ 64 _d[i] = d[i]; 65 } 66 } 67 68 public void rollSouth(){ 69 int tmp = _d[TOP]; 70 _d[TOP] = _d[NORTH]; 71 _d[NORTH] = _d[BOTTOM]; 72 _d[BOTTOM] = _d[SOUTH]; 73 _d[SOUTH] = tmp; 74 } 75 76 public void rollNorth(){ 77 int tmp = _d[TOP]; 78 _d[TOP] = _d[SOUTH]; 79 _d[SOUTH] = _d[BOTTOM]; 80 _d[BOTTOM] = _d[NORTH]; 81 _d[NORTH] = tmp; 82 } 83 84 public void rollEast(){ 85 int tmp = _d[TOP]; 86 _d[TOP] = _d[WEST]; 87 _d[WEST] = _d[BOTTOM]; 88 _d[BOTTOM] = _d[EAST]; 89 _d[EAST] = tmp; 90 } 91 92 public void rollWest(){ 93 int tmp = _d[TOP]; 94 _d[TOP] = _d[EAST]; 95 _d[EAST] = _d[BOTTOM]; 96 _d[BOTTOM] = _d[WEST]; 97 _d[WEST] = tmp; 98 } 99 100 public void rollRight(){ 101 int tmp = _d[SOUTH]; 102 _d[SOUTH] = _d[WEST]; 103 _d[WEST] = _d[NORTH]; 104 _d[NORTH] = _d[EAST]; 105 _d[EAST] = tmp; 106 } 107}

投稿2016/11/13 04:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gyro16

2016/11/13 04:58

for(int i = 0; i < n; i++){ for(int j = 0; j < 6; j++){ d[j] = scan.nextInt(); } Dice[i] = new Dice(d); } でもシンボルが見つからないです。
gyro16

2016/11/13 05:01

dices[i] = new Dice(d);ですね。
退会済みユーザー

退会済みユーザー

2016/11/13 05:15

dices[i] = new Dice(d); とはどこですか 訂正したコードのどの部分ですか
退会済みユーザー

退会済みユーザー

2016/11/13 05:18

for(int i = 0; i < n; i++){ for(int j = 0; j < 6; j++){ d[j] = scan.nextInt(); } dices[i] = new Dice(d); } ではないでしょうか
gyro16

2016/11/13 05:21

そうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問