プログラミングがなんたるかを理解していませんね。
『プログラムはこう書けばいい』っていう決まったものではなくて、『人間が現実でやっている手順を書いたもの』、つまりレシピを逐一解釈して処理しているだけにすぎません。
だから、**『現実世界でならどういう手順でやっているか』**を考えててみてください。
今回はそのうえで、**『規則性』**も必要ですね。
まず、プログラミングガーとかは置いといて、『現実世界での考え』をまとめてください。
つまり、『手作業で、質問にある図形(?)を書くならどうするか』です。
私ならとりえあず、『規則性』を見付けます。
数字を入力してください
3
*・・
・*・
・・*
数字を入力してください
5
*・・・・
・*・・・
・・*・・
・・・*・
・・・・*
ですよね。
『数字を入力してください』で指定された値(上記だと3や5) を ここでは N と置きましょうか。
そうすると、こういう場合は必ず、『何かしらの形でNが使われている』ことが多いです。
たとえば、高さや幅、底辺の個数等。
それで出来上がった図形を見ると、N = 3 のとき、縦 = 3, 横 = 3 となっています。
N = 5 の時は 縦 = 5, 横 = 5 です。
ということは、
**縦 = N, 横 = N **だと言えますね。
そして、次は図形を構成している文字について分析します。
図形は "*" と "・" の二つで構成されていますね。
ということは、この二つの基準がどっかにあるはずです。
たとえば『"・" は3の倍数になっている』とか『"・"は2飛びになっている』とかみたいな。
で、見てみると、N = 3 のとき、
1行目: 1個目が"*"で、それ以外は"・"である
2行目: 2個目が"*"で、それ以外は"・"である
3行目: 3個目が"*"で、それ以外は"・"である
ですね。
まあ、N = 5の場合等はご自分でやってください。発想は同じです。
それで考えてみると、行を R (= Row ) として、
R行はR番目は"*"で、それ以外は"・" である
といえますね。
それで、R行のやつは +1 していっている。
ここまでが分析。
次は実際にホワイトボードかノートかなんかに図形を書いてみてください。
N = 7 のときとか。
N = 7 だとしてやってみましょうか。
まずは 7×7 ( 縦・横ともに 7 ) の図形ですね。
だから、
・・・・・・・
・・・・・・・
・・・・・・・
・・・・・・・
・・・・・・・
・・・・・・・
・・・・・・・
みたいになるはずです。( "・"だけの場合 )
そして、"・" よりも "*" の方が少ないのでこれを使います。
まず1行目は 1番目だけ "*" ですね。なので
となります。
そして、2行目は 2番目だけ "*" ですから、
となります。
3行目以降も同様にやっていくと、
*・・・・・・
・*・・・・・
・・*・・・・
・・・*・・・
・・・・*・・
・・・・・*・
・・・・・・*
ときれいな図形が出来上がりました。
これをコードに落とし込むだけです。
まず、2重forでやります。
最初のforで縦(r)を、内側のforで横(c)をやります。
そうすると、(二次元配列で表現すると) arr[r][c] と表現できます。
そして、r (行) でやりながら c (列) で書いていく。
そして、『R行のときR番目は"*", それ以外は"・"』であることを表現するため、
『現在のcが現在のrと同じである場合、"*"を, それ以外は"・"を表示する』みたいにします。
つまり、if( r == c ) ... みたいにします。
あるいは別の変数を用意して +1 していく……っていう手もありますが、今回は if( r == c ) とかでもいけますので、こちらでやります。
あとはこれらを実装するだけです。
[追記1]
あ、忘れていました。上記では R行 と書きましたが、for文で初期値が 0 なら (R+1)行 とかみたいに修正してください。(コードによる)
[追記2]
現在は下記のようなコードの状態です。*が思った通りのところに表示されず困っています。
ご自分のコードを、第三者のコードとして、読んでみてください。
繰り返します。『プログラムはこう書けばいい』っていう決まったものではなくて、『人間が現実でやっている手順を書いたもの』、つまりレシピを逐一解釈して処理しているだけにすぎません。
なので、『一行レベルで何をしているかをコメントにする』がいいと思います。
コメントにしなくても、テキストファイルに書いてもいいです。
とにかくコードを読むのです。
Java
1import java.util.Scanner;
2public class Main {
3 public static void main(String[] args) {
4 System.out.println("数字を入力して下さい");
5
6 int n = new java.util.Scanner(System.in).nextInt();
7
8 for (int i = 1; i <= n; i++) {
9 for (int j = 0; j < n; j++) {
10 System.out.print("・");
11
12 }
13 System.out.println(" ");
14 }
15 }
16}
ですよね?
Java
1import java.util.Scanner;
2public class Main {
3 public static void main(String[] args) {
4 // 入力を促す文言
5 System.out.println("数字を入力して下さい");
6 // コンソールから1個数字を取り出す( 標準入力 )
7 int n = new java.util.Scanner(System.in).nextInt();
8 // i の初期値: 1 で n まで繰り返す
9 for (int i = 1; i <= n; i++) {
10 // j の初期値: 0 で n (前)まで繰り返す
11 for (int j = 0; j < n; j++) {
12 // "・"を出力
13 System.out.print("・");
14
15 }
16 // 半角スペースを出力
17 System.out.println(" ");
18 }
19 }
20}
と、なり、
Java
1import java.util.Scanner;
2public class Main {
3 public static void main(String[] args) {
4 // 入力を促す文言
5 System.out.println("数字を入力して下さい");
6 // コンソールから1個数字を取り出す( 標準入力 )
7 int n = new java.util.Scanner(System.in).nextInt();
8 // i の初期値: 1 で n まで繰り返す
9 for (int i = 1; i <= n; i++) {
10 // j の初期値: 0 で n (前)まで繰り返す
11 for (int j = 0; j < n; j++) {
12 // "・"を出力
13 System.out.print("・");
14
15 }
16 // 半角スペースを出力
17 System.out.println(" ");
18 }
19 }
20}
21
221. 入力を促す文言
232. コンソールから1個数字を取り出す
243. [1,n] まで繰り返す
25 3.1. [0,n) まで繰り返す
26 3.1.1. "・" を出力
27 3.1.2. 半角スペースを出力
となっています。
これを動作レシピとして、実際にこの通りに動いてみてください。
そうすればなぜ的確に動かないかが分かるはずです。
これでもわからないなら、素質が無いと言わざるを得ません。
[追記3]
swordoneさんからのアドバイスで追記します。
えーっと、swordoneがおっしゃるように、数字でやると、
単純な for文の入れ子 ( 二重for ) で数字を出力してみると、
0 1 2 3 4 5 6
0 1 2 3 4 5 6
0 1 2 3 4 5 6
0 1 2 3 4 5 6
0 1 2 3 4 5 6
0 1 2 3 4 5 6
0 1 2 3 4 5 6
となっています。これを "*" だけやってみると、
* 1 2 3 4 5 6
0 * 2 3 4 5 6
0 1 * 3 4 5 6
0 1 2 * 4 5 6
0 1 2 3 * 5 6
0 1 2 3 4 * 6
0 1 2 3 4 5 *
のようになるはずです。
もし 外側も 内側も 1 から始まっているなら、数字を読みかえてください。