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

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

ただいまの
回答率

90.43%

  • Java

    14772questions

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

  • 配列

    558questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

  • コマンドプロンプト

    370questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

二次元配列に漸化式を利用し、特定の数字を表示させる方法

解決済

回答 2

投稿 編集

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

kurikuri

score 5

前提・実現したいこと

javaを使って[5][6]の二次元配列を作り、ここに漸化式を使って[4][5]の値を表示するプログラムを作りました。
ここからが問題なんですが[0][3]と[3][3]の要素に0を代入する場合の[4][5]の値を表示したいと思っています。その追記の仕方が分かりません
どうかよろしくお願いします

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

[0][3]、[3][3]に数値を代入する際に反映されません

該当のソースコード

public class Report1201{
public static void main(String[] args){

int[][] f = new int[5][6];

for(int row = 0; row < 5; row++){
for(int column = 0; column < 6; column++){
f[row][0] = 1;
f[0][column] = 1;
}
}

for(int row = 1; row < 5 ; row++){
for(int column = 1; column < 6; column++){
f [row][column]=f[row-1][column]+f[row][column-1];
}
}
System.out.println(f[4][5]) ;
}
}

試したこと

数値の代入

補足情報(FW/ツールのバージョンなど)

出来たものを図式化した場合は画像のようになります

![イメージ説明](3b0e72576a4c7654c648a2226fb02f78.png)

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2019/01/11 09:40

    JavaとJavaScriptのタグは区別してください

    キャンセル

  • kurikuri

    2019/01/11 10:00

    申し訳ごさいません

    キャンセル

回答 2

checkベストアンサー

+1

現状とやりたいことから推測して回答します。

現状のプログラムで処理が不十分ではないかと思います。

 1   -   -   -   -   - 
- - - - - -
- - - - - -
- - - - - -
- - - - - -

たぶんこれが初期状態ですよね?

上端はその上が0として計算していて、
左端はその左が0として計算しているのかと思います。

正しく書くとすれば以下のように

 0   0   0   0   0   0   0 
 0   1   -   -   -   -   - 
 0   -   -   -   -   -   - 
 0   -   -   -   -   -   - 
 0   -   -   -   -   -   - 
 0   -   -   -   -   -   - 

0の部分を省かない書き方で、これが本来の初期状態じゃないでしょうか?

という仕様であればプログラムの

for(int row = 0; row < 5; row++){
    for(int column = 0; column < 6; column++){
        f[row][0] = 1;
        f[0][column] = 1;
    }
}


ここの部分(見にくかったので勝手にインデント入れました)は少し不適切な処理になりますね。

(無駄な二重ループは置いておいて)
左端は上から順に、自身の上の値と0を足します。
上端は左から順に、自身の左の値と0を足します。
が、この書き方では1を決め打ちしているので、[0][3]に0を入れるようなときに対応できません。

正しくは[1][1]以降の計算のように隣接する計算をしないとまずいです。
で、計算のときに指定の座標になった場合だけ、強制的に0を決め打ちで代入してあげれば、
以降の計算は正しくやってくれるはずです。

[5][6]の配列を[6][7]に拡張して表通りの初期状態で始めるのがわかりやすいとは思いますが、
まあそこは質問者様の選択次第なのでどちらでも大丈夫です。


以上の回答は現状のプログラムを基に考えたものですが、
仕様が以下のものである場合、別な考え方ができます。

1. はじめに通常の漸化式の数値を計算しておく(現状のプログラム通りの数値)
2. その後、任意の座標を入力or指定し、計算をやり直す
3. 表示

この場合、漸化式を計算する処理を関数化しておく必要があります。
いわゆる再帰というテクニックを使用します。

指定された座標を基準に、

  1. 座標以降の右側の値を更新
  2. 座標以降の下側の値を更新
  3. 座標を右下にずらし、1.の処理から繰り返す。

という更新方法があります。

まあでもおそらくここまでは考えていないので、こちらは参考程度に収めていただければと。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

for(int row = 1; row < 5 ; row++){
    for(int column = 1; column < 6; column++){
        int v=f[row-1][column]+f[row][column-1];
        f [row][column]=v;
        if(v==0&&((row==0&&column==3)||(row==3&&column==3))){
            System.out.println(f[4][5]) ;
        }
    }
}


質問頂きありがとうございます!
これで出来ると思います。
点を増やすなら配列にいれた方がいいかもしれません

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/11 08:58

    二次元目のヌルポのきがす

    キャンセル

  • 2019/01/11 09:58

    回答ありがとうございます!
    打ち込みコマンドプロンプトで実行した結果、java17 エラー;')'がありませんと表示されました
    何度もすいません

    キャンセル

  • 2019/01/11 10:33

    if(の閉じがないっぽいから
    if(v==0&&((row==0&&column==3)||(row==3&&column==3))){
    のようにしてはどうでしょうか?

    キャンセル

  • 2019/01/11 11:31 編集

    ありがとうございます
    エラーは出ませんでしたが[4][5]の値を表示せず、何も出ませんでした。

    キャンセル

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

  • Java

    14772questions

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

  • 配列

    558questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

  • コマンドプロンプト

    370questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。