- 締切済み
式の型は配列型で int に解決済み。が解けませ。
こんにちは、学校の課題で重力3目並べを作っていますが、式の型、int型、配列型というところでまったくつまずいてしまっています。どうか課題提出できますようお助けいただけますでしょうか。お願いいたします。私はJUNO eclipsをつかっております。 エラーは、34,50,53,66,118行目で”式の型は配列方でINTに解決済みである必要があります”です。 (申し訳ありません。文字数ぎりぎりで詰めて質問させていただきした。読みづらですがご容赦ください。 package Colonne5; public class Colonne5 { final static int jouer1 = 0; final static int jouer2 = 1; final static char [] pion = new char [] {'*','0', ' '}; final static int vide = 2; static final int PionEtoile = 1; static final int PionRond = -1; final static int Dwidth = 5; final static int Dheight = 5; final static int PreCOL = 0; final static int DerCOL = Dwidth - 1; final static int Hautligne = Dheight - 1; static int Basligne = 0; final static int H = 0 ; final static int V = 1 ; final static int[] HOR = new int[] {1, 0} ; final static int[] VER = new int[] {0, 1} ; final static int[] UP = new int[] {1, 1} ; final static int[] DOWN = new int[] {1, -1} ; final static int[][] DIRECTION = new int[][] {HOR, VER, UP, DOWN} ; private static int[][] damier ; // grid private static int name ; // player name private static char player ; // turn of gamer private static int result ; private static int impactLine ; public Colonne5 (int john){ damier = new int[Dwidth][Dheight]; for (int i = 0 ; i < Dwidth; i++) { for (int j = 0; j < Dheight; j++) { damier[i][j] = vide; } } this.name = john; player = jouer1; result = vide; } private boolean Libre(int column){ //グリッドが空いているか判断 return damier[column][Hautligne]==vide; } private boolean damierRempli() { int column = PreCOL; while (column <= DerCOL) { if (Libre(column)) return true ; column++ ; } return false ; } private void jouerCoup() throws IOException { //ゲーム開始 while (result == vide && damierRempli()) { afficher() ; int column =name[player]; System.out.print("Enter " + (PreCOL + 1) + " to " +(DerCOL +1) + " ?") ; System.in.read(); sommetColonne(column) ; if (coupGagnant(player, impactLine)) result = player ; else demanderCoup() ; } afficher() ; if (result == vide) System.out.print(" partie nulle ") ; else System.out.println(name[result] + " gagne") ; } private boolean coupGagnant (int column, int ligne) { //勝者判断 int i = 0 ; while (i < DIRECTION.length) { if (coupGagnant(column, ligne, DIRECTION[i])) return true ; i++ ; } return false ; } private static boolean coupGagnant(int column, int ligne ,int[] dir) { int nextColumn = column + dir[H] ; int nextLine = ligne + dir[V] ; int forward = 0 ; while (damier[nextColumn][nextLine] == player) { nextColumn += dir[H] ; nextLine += dir[V] ; forward++ ; } nextColumn = column - dir[H] ; nextLine = ligne - dir[V] ; int backward = 0 ; while (damier[nextColumn][nextLine] == player) { nextColumn -= dir[H] ; nextLine -= dir[V] ; backward++ ; } return backward + 1 + forward >= 3 ; } private static int demanderCoup() { //どちらのプレイヤーの順番か判断 if(player==jouer1){ player = jouer2; } else player = jouer1; return player; } private void sommetColonne(int column) { //現在の駒の一番上を取得判断 if(!Libre(impactLine)) throw new RuntimeException(" colonne pleine ") ; impactLine = Hautligne ; while (impactLine > Basligne && damier[Dheight-1][impactLine-1] == vide) impactLine-- ; damier[Basligne][impactLine] = player ; } private void afficher() { //ゲームの表示 for (int column = PreCOL ; column <= DerCOL ; column++) System.out.print("| " + (column + 1) + " "); System.out.println("|"); for (int line = Hautligne ; line >= Basligne ; line--) { for (int column = PreCOL ; column <= DerCOL ; column++) System.out.print("| " + pion[damier[column][line]] + " ") ; System.out.println("|"); } } public static void main(String[] args) { Colonne5 joue = new Colonne5(name) ; joue.jouerCoup(); } }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hirotn
- ベストアンサー率59% (147/246)
mainメソッドの Colonne5 joue = new Colonne5(name) ; これをみる限り、nameは配列ではないんですよね(変数nameフィールドがそのまま引数に入ってしまっているという問題※はありますが)。 一方、 System.out.println(name[result] + " gagne") ; となっており、利用するときは配列になっているという矛盾があります。 このあたりの仕様がためをして、プログラムすることが必要だと思います。 ではどうなるべきかと考えてみると、jouer1,2 で先攻後攻が定義されていて、playerに現在の先攻後攻が格納されるようなので、次のようになると考えられます。(一案です) 変数nameの定義: String [2] name; Colonne5の生成: Colonne5 joue = new Colonne5(new String[]{"John", "Jane"}); コンストラクタでのnameの定義: this.name[0] = john[0]; 右辺 new String(john[0]);かもしれない this.name[1] = john[1]; sommetColonneメソッドから引数columnを外す(内部で使っていないから) ※前提として質問のプログラムから読み取れる限り あと、クラス変数(static)を使わなくてはならない理由が分からない変数があります。 damier以下です。以下URLを参考ください。 http://www.javaroad.jp/java_class9.htm
- Tacosan
- ベストアンサー率23% (3656/15482)
「芋ずる式にエラーになってしまって困っています」ってのは, 具体的には ・どのようなプログラムで ・どのようなエラーが出ている のでしょうか? あと, ここに至るまでコンパイルしたことはなかったんですか? それにしても, ここまで英語とフランス語がごっちゃごちゃになると, なんというか笑える. ど~せなら全部フランス語で押し通してほしかった.
- hirotn
- ベストアンサー率59% (147/246)
throws IOExceptionは、特にthrow指定なかったので、(エラーが出るためこれを省いた上で)javacで履かれた以下のエラー Colonne5.java:53: 配列が要求されましたが、int が見つかりました。 int column =name[player]; ^ Colonne5.java:66: 配列が要求されましたが、int が見つかりました。 System.out.println(name[result] + " gagne") ; に対して、定義を見ると、次のようになっています。 private static int name ; // player name nameを配列にしないといけません。
お礼
ありがとうございます。ビギナーですのでかなり難しい課題なのですが、教えていただいたように配列にしてみましたが書き方が悪かったようでやはりエラーをはいてしまいます。private static int name ;を配列として宣言してint[] name;にしまして、本体の中もこの書き方に適したようにしたのですが.....そうすると芋ずる式にエラーになってしまって困っています。確かにnameは配列のような感じで、53と66行目でname[player],name[result]という形で、この部分がやはりとてもややこしく難しいです。 もうすこし、色々変えてみます。早々のお答え本当にありがとうございます。
お礼
ありがとうございます。そうですね、おっしゃる通りです。仕様を固めてからといいますか、もう1度仕様を考え直してみます。ご親切に参考URLまで教えていただき感謝しております。