🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

4回答

1114閲覧

for文の条件がわからないです

k-1015.

総合スコア4

Java

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

0グッド

1クリップ

投稿2021/03/07 08:13

編集2021/03/10 12:46

数字を入力してください

*・・
・*・
・・*

数字を入力してください

*・・・・
・*・・・
・・*・・
・・・*・
・・・・*

上記のようになるようにfor文を用いてコードを書きたいのですがわからない状態です。
n行目のn個目を*に出来る条件のfor文を付け足せばできると思うのですが。。。
現在は下記のようなコードの状態です。*が思った通りのところに表示されず困っています。

import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("数字を入力して下さい"); int n = new java.util.Scanner(System.in).nextInt(); for (int i = 1; i <= n; i++) { for (int j = 0; j < n; j++) { System.out.print("・"); } System.out.println(" "); } } }

結果 
数字を入力してください

・・・・
・・・・
・・・・
・・・・

どうかお力を貸してください。
よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/07 08:20

あと「図形」だと誤解をあたえます。 単なるそういう文字列を出力して「それっぽく見せている」だけなので。 実際にJavaでライブラリ使えば図形を書けるので。
BeatStar

2021/03/07 08:23

タグが滅茶苦茶です。『for』『if』『プログラミング言語』『JNI』は無関係です。 確かにfor文なんかは使っていますが、タグとしてはふさわしくないです。 もしつけるのなら、すべての内容に、ifだのforだのSystem.out.printlnだのをつけないといけないのでは? プログラミング言語って当たり前。Javaはプログラミング言語以外の何に見えるの? そこまでするなら、『日本語』『英語』『英単語』もつけては? だって日本語での質問だし、英単語も使っているから。 それぐらい滅茶苦茶です。タグを修正してください。質問者なら質問文を修正できます。修正してください。
m.ts10806

2021/03/07 11:36

あと要件書いてないと if(n==3){ if(n==5){ で固定分岐のprintの大喜利回答が出てきても文句言えません。 それによってあなたが弊害をうけても責任はおえません。
momon-ga

2021/03/09 03:28

> 現在は下記のようなコードの状態です。*が思った通りのところに表示されず困っています。 どこにも、*を書くコードを書いていないから表示されないです。 もう少しなので、落ち着いてBeatStarさんの回答を読んでみてはどうでしょうか。
guest

回答4

0

ベストアンサー

プログラミングがなんたるかを理解していませんね。

『プログラムはこう書けばいい』っていう決まったものではなくて、『人間が現実でやっている手順を書いたもの』、つまりレシピを逐一解釈して処理しているだけにすぎません。

だから、**『現実世界でならどういう手順でやっているか』**を考えててみてください。

今回はそのうえで、**『規則性』**も必要ですね。

まず、プログラミングガーとかは置いといて、『現実世界での考え』をまとめてください。

つまり、『手作業で、質問にある図形(?)を書くならどうするか』です。

私ならとりえあず、『規則性』を見付けます。

数字を入力してください 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 から始まっているなら、数字を読みかえてください。

投稿2021/03/07 08:51

編集2021/03/12 11:39
BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/03/09 05:13

これからもプログラミングをするのなら、『質問方法を工夫して』ください。 そうしないと成長できませんよ。 SEの場合であっても、クライアントやプログラマとの意思疎通をはからないといけないし。 『コードは"<コード>"みたいなボタンがあるからそれを使おうね』と言っても、 修正しない、私の回答みたいに、書いたものも読もうとすらしない、出来るわけないと思うが。
swordone

2021/03/09 11:12

多分「・」を打つより、数字を表示させてみたほうがわかるかもしれない。
BeatStar

2021/03/12 11:33

swordoneさん、ありがとうございます。 確かにそうですね。追加しておきます。
guest

0

まずは、*を考えないで・だけで書いてみましょう。
がんばって書いてみてください。

#それでうまく行けばそれから考えればいいのです。

投稿2021/03/07 08:20

編集2021/03/07 08:20
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Java

1import java.util.Scanner; 2public class Main { 3 public static void main(String[] args) { 4 System.out.println("数字を入力して下さい"); 5 6 Scanner scanner = new Scanner(System.in); 7 int i = scanner.nextInt(); 8 9 for (int j = 1; j <= i; j++) { 10 for (int k = 1; k <= i; k++) { 11 if(k==j){ 12 System.out.print("*"); 13 }else{ 14 System.out.print("・"); 15 } 16 17 } 18 System.out.println(); 19 } 20 } 21} 22```ありがとうございました!

投稿2021/03/13 02:36

k-1015.

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1import java.util.Scanner; 2public class Main { 3 public static void main(String[] args) { 4 System.out.println("数字を入力して下さい"); 5 6 Scanner scanner = new Scanner(System.in); 7 int i = scanner.nextInt(); 8 9 for (int j = 1; j <= i; j++) { 10 for (int k = 1; k <= i; k++) { 11 if(k==j){ 12 System.out.print("*"); 13 }else{ 14 System.out.print("・"); 15 } 16 17 } 18 System.out.println(); 19 } 20 } 21} 22```皆さまありがとうございました!

投稿2021/03/13 02:30

k-1015.

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問