前提・実現したいこと
多次元配列に数値を入れる
①.②はできたんですが③が全く分かりません。
調べて多次元は入れるに代入くらいしかでてこなくお手上げ状態です
ご教授お願い致します。
3×3の多次元配列を作成し、1~9の数値を格納するプログラム
数値の入れ方を選択してください(1,2,3):1
1つ目の数値を入力してください(1~9):1
入力結果です
1 0 0
0 0 0
0 0 0
2つ目の数値を入力してください(1~9):2
入力結果です
1 2 0
0 0 0
0 0 0
//全部入力が完了したらありがとうございましたと出力で終わり。
①上列から順番に数値を格納していくプログラム 123
456
789
②左列から順番に数値を格納していくプログラム 147
258
369
②右下に数値を格納していくプログラム 492
357
816
ルール説明
1.一番最初は下段の真ん中に1を格納してスタート
2.右下に移動したときに下にはみ出た場合は上に戻る
3.右下に移動したときに右にはみ出た場合は左に戻る
発生している問題・エラーメッセージ
import java.util.Scanner; public class taji { public static void main(String[] args){ Scanner stdIn = new Scanner(System.in); int [][]data=new int[3][3]; int nyuryoku; int x=0; int y=0; int x1=0; int y1=0; System.out.print("数値の入れ方を選択してください"); int irekata=stdIn.nextInt(); if(irekata==1){ for(int i=1;i<9;++i){ System.out.print(i+"つ目の整数を入力してください"); nyuryoku=stdIn.nextInt(); data[x][y]=nyuryoku; ++y; if(y==3){ ++x; y=0; } System.out.println("出力結果です"); //表示部分 スタート for(x1=0;x1<3;++x1){ for(y1=0;y1<3;++y1){ System.out.print(data[x1][y1]); if(y1==2){ System.out.print("\n"); } } } //表示部分 エンド } } if(irekata==2){ for(int i=1;i<9;++i){ System.out.print(i+"つ目の整数を入力してください"); nyuryoku=stdIn.nextInt(); data[x][y]=nyuryoku; ++x; if(x==3){ x=0; ++y; } System.out.println("出力結果です"); //表示部分 スタート for(x1=0;x1<3;++x1){ for(y1=0;y1<3;++y1){ System.out.print(data[x1][y1]); if(y1==2){ System.out.print("\n"); } } } //表示部分 エンド } } } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
「ルール説明」というのは irekata==3 の場合の「ルール」でしょうか?
1 は分かりますが、 2, 3 の意味が分かりません。3x3 の中に順番に数値を入れていくのに、何が「はみ出」るのでしょうか。
「右下に移動したときに下(もしくは右)にはみ出た」とは、具体的に(数値の入れ方で 3 を選んで「xつ目の数値を入力してください(1~9):」と表示される度に)どのような入力を行うとどうなるということでしょうか。
もし、入れ方=3 のコードを作ってみたが想定した動作をしなかったのでしたら、そのコードもご提示ください。このままでは単に「3の場合の処理を作ってください」という丸投げに近いご質問となってしまいます。
3を選択した場合のルール説明です
わかりました出来るだけ頑張ってみます
1の次が2なので2をいれようとしたら1の右下になり配列の場所がないのではみ出した一番上の配列の場所に2をいれるって言う感じです。なのでこれを続けると
492
357
816
になります
わかりにくくすみません
なるほど、右下というのは「直前に数値を入れた場所」の右下、でしょうか。
とすると・・・ 3→4 や 6→7 はなぜこうなりますか。
直前の右下ですね
このルールだと4は3の右下、つまり1を上書きすることになると思うのですが
どういうルールで3の上に4が来るんでしょうか?
とりあえず、前の閉じていないご質問を片付けてからの方が良くありませんか。
[自販機のお釣りを硬貨でだす方法] https://teratail.com/questions/367840
既にある数値にあたると上書きではなくその直前に入れた値の列の一番上になるというルールを書くのを忘れてましたすみません
なので4は直前にいれた3の上にはいります
回答2件
あなたの回答
tips
プレビュー