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

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

ただいまの
回答率

89.99%

ヤング図形のプログラム

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 594

TomofumiKimura

score 23

このプログラムでisSetOf1toN のメソッドがしなくてはいけないことは、
整数のセットの中でセルの合計数と同じ数字があればtrue をないならfalse を返さなくてはいけないのですが、大学のパソコンでチェックするとこれが出ます。
「1、4、5、10、12」「2、5、8」「3、9、12」「7」
expected false but found true どうしてでしょうか?二つ12がありますが、どちらにしてもセルの数と同じなのでいいと思うのですが。

package week04;

/**
 * Skeleton code for an array based implementation of Young's tableau.
 *
 * @author Iain Hewson
 */
public class TableauApp {

    /**
     * The main method is just used for testing.
     *
     * @param args command line arguments are not used.
     */
    public static void main(String[] args) {
        final int [] [] valid = {{1,4,5,10,11},{2,6,8},{3,9,12},{7}};
    //System.out.println(columnValuesIncrease(valid));
    final int [] [] t = {{1,2,3,4,5},{6,7,8},{9}};
    System.out.println(columnValuesIncrease(t));
    System.out.println(isSetOf1toN(valid));


    }

    /**
     * Determines whether the array passed to it is a valid tableau or not.
     *
     * @param t a two-dimensional array to test for tableau-ness.
     *
     * @return true if the parameter is a valid tableau, otherwise false
     */
    public static boolean isTableau(int[][] t){
        return false;
    }
    /**
     * Returns true if no row is longer than a preceding row,
     * Otherwise false.
     * @param t a two-dimensional array which represents a tableau.
     * @return true if no row is longer than a preceding row,
     * otherwise false.
     */
    public static boolean rowLengthsDecrease(int [] [] t){
    boolean result = true;
    // check if the row is not empty
    if (t[0].length != 0){
        System.out.println("The two dimentional array is this");
        System.out.println(toString(t));
        int first = t[0].length;// the first arrays element.
        int second = 0;// second longest or equal to the first element.
        for (int i =1; i<t.length;i++){
            // t.length = 4
        second  = t[i].length;// 0 changed to 4
        if(result){// if the result is still true
            if(first >= second ){// if first is longer or same as second
            first = second;// change first value to second value(second row length)
            result = true;
            }else{
            System.out.println("No row is longer than a preceding row");
            result = false;
            }
        }// second if  
        }// for 
    }else{
        result = false;
    }// first if 
    return result;
    }// method 
    /**
     *returns true if no row is longer than a preceding row, otherwise false.
     *@param t two dimentional array
     *@return true if the integers are increasing from left to right.
     */
    public static boolean rowValuesIncrease(int [] [] t){

    boolean result = true;
    for (int i =0; i<t.length; i++){
        int first = t[i][0];// first elements for each array
        int second =0;
        for (int j = 1; j<t[i].length;j++){


        if (t[i][j] > first){
            second = t[i][j];
            System.out.println("second int is "+" " + second);
            System.out.println("First  int is "+" " + first);
            System.out.println("");
            result = true;
            first = second;
            System.out.println("Current result " + "" + result);
        }else{
            result = false;
            return false;
        }// if end

        }// end for loop 
    }// end for loop
    return result;


    }// end method

    /**
     * Returns true if from top to bottom in any column,
     * the integers are increasing otherwise false.
     * @param t two dimentional array 
     * @return true if the integers are increasing
     * 
     */
    public static boolean columnValuesIncrease(int [][] t){
    int firststep=0;
    int temp = 0;
    for (int i = 0; i<t[0].length; i++){
        for (int j = 0; j<t.length; j++){
        if (j == 0){

            firststep = t[j][i];
            continue;

        }
        try{
            temp = t[j][i];
        }catch(Exception e){
            continue;
        }
        if (firststep > temp ){
            return false;
        }
        firststep = temp;
        }

    }
    return true;

    }
    /**
     * Returns true if the set of integers used is {1,2...n} where
     * n is the number of cells, otherwise false.
     * @param t two dimentional array
     * @return true 
     */
    public static boolean isSetOf1toN (int [] [] t){
    boolean result = true;
    int count = 0;// 10
    // get total number of cells 
    for (int i = 0; i<t.length; i++){
        count += t[i].length;

    }
    for (int i = 0; i<t.length; i++){
        for (int j = 0; j<t[i].length; j++){
        if (t[i][j] == count ){
            result = true;
            return result;

        }else{
            result = false;

        }

        }

    }

    return result;


    }
    /**
     *  Returns a string representation of an array based tableau.
     *
     * @param t a two-dimensional array which represents a tableau.
     *
     * @return a string representation of an array based tableau.
     */
    public static String toString(int[][] t) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < t.length; i++) {
            for (int j = 0; j < t[i].length; j++) {
                result.append(String.format("%-4s", t[i][j]));
            }
            if (i < t.length-1) {
                result.append("\n");
            }
        }
        return result.toString();
    }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

整数のセット、つまり整数の集合で議論しなくてはいけません。
問題の配列は1~12の整数が1つずつ表れており、その最大数は12、
セルの数も12で、条件に合致します。

集合で論じる、つまり追加分は1~12の整数がすべて使われていない(11が抜けてる)のでfalseと出さなければならないところを、最大数12だけで見て判定しているのでそうなります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/26 13:08

    おーーすごいですね、頭いいですねーー。すみません。自分は頭悪いので。大学から渡された英語の奴には
    isSetOf1toN(int[][] t) A method that returns true if the set of integers used is {1, 2, . . . , n} where n is the number of cells, otherwise false.ってあったので、一番最後の整数がそうだと思ってしまいました。ありがとうございます!!

    キャンセル

  • 2017/03/26 13:50

    質問もソースも変わっていますが、当初の問題が解決したならベストアンサーでしょう。

    キャンセル

  • 2017/03/26 13:51

    はい

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る