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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

解決済

4回答

2092閲覧

Java □と■を交互に出す

dounatu

総合スコア2

Java

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

0グッド

0クリップ

投稿2023/04/16 04:28

編集2023/04/16 05:07

実現したいこと

Javaでfor文を使い
□■□■
■□■□
□■□■
というプログラムを作成したい

該当のソースコード

Java

1public class PracticeFor { 2 public static void main(String[] args) { 3 int n = 12; 4 5 for (int i = 0; i < n; i++) { 6 if (i % 2 == 1) { 7 System.out.print('■'); 8 } else { 9 System.out.print('□'); 10 } 11 } 12 } 13}

試したこと

□■□■□■□■□■□■
と出力することが出来たのですが、その後改行して一段目とは違う色の四角を出すという処理の書き方がわかりません。

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

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

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

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

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

Zuishin

2023/04/16 04:29

作成して構いませんよ。
Zuishin

2023/04/16 05:12

> その後改行して一段目とは違う色の四角を出すという処理の書き方がわかりません。 関数に切り出すとわかりやすくなります。 引数によって白から始まるか黒から始まるかを指定できる関数を作り、それを交互に呼び出しましょう。
jimbe

2023/04/16 07:15

今提示されているコードでなぜ白から始まって黒白交互に出るのか分かっているでしょうか。 System.out.println(); で改行出来ます。
guest

回答4

0

今何行目ですか

文字の白黒判定はi % 2
これに今何行目かを加えるとよい (i + i/4) % 2
行に含まれる文字数を変えたければ4を任意の数nに変える
ただしnが偶数の場合のみ行i/nを加える

改行は(i+1)%n == 0

素朴案

1行の文字数が偶数、奇数どちらの場合でもチェッカーボードになるよう除数dを調整しました。

Java

1 /** 2 * チェッカーボードを作る 3 * @param l 1行のマス目の数 4 * @param n 行数 5 */ 6 static void pattern(int l, int n) { 7 int d = (l%2==0) ? l : l * n; 8 for (int i = 0; i < l * n; ++i) { 9 if ((i+i/d)%2 == 0) { 10 System.out.print('□'); 11 } else { 12 System.out.print('■'); 13 } 14 if ((i+1)%l == 0) { 15 System.out.println(); 16 } 17 } 18 System.out.println(); 19 }

関数化案

文字の判定、改行の判定をそれぞれ関数化しました。

Java

1import java.util.function.Function; 2import java.util.stream.Collectors; 3import java.util.stream.IntStream; 4 5public class CheckerBoard { 6 7 static Function<Integer,String> letter = x -> (x%2 == 0) ? "□" : "■"; 8 static Function<Integer,Function<Integer,String>> supp1 = l -> (l%2 == 0) ? x -> letter.apply(x + x/l): x -> letter.apply(x); 9 static Function<Integer,Function<Integer,String>> supp2 = l -> x -> ((x+1)%l == 0) ? "\r\n" : ""; 10 11 static void pattern(int l, int n) { 12 Function<Integer,String> bw = supp1.apply(l); // "□""■"判定 13 Function<Integer,String> cr = supp2.apply(l); // "\r\n"判定 14 System.out.println( 15 IntStream.range(0,l * n) 16 .mapToObj(i -> bw.apply(i) + cr.apply(i)) 17 .collect(Collectors.joining()) 18 ); 19 } 20}

投稿2023/04/17 00:53

編集2023/04/17 21:18
xebme

総合スコア1083

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

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

0

ベストアンサー

改行文字を含めて 15文字出力すると考えればよいのでは?

Java

1public class PracticeFor { 2 public static void main(String[] args) { 3 int n = 15; 4 for (int i = 0; i < n; i++) 5 if (i % 5 == 4) 6 System.out.println(); 7 else if (i % 2 == 1) 8 System.out.print('■'); 9 else 10 System.out.print('□'); 11 } 12}

投稿2023/04/16 11:05

編集2023/04/16 11:12
kazuma-s

総合スコア8224

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

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

0

i % 2 == i / 4 % 2 が成立なら □ 、不成立なら ■ を表示、 その後に i % 4 == 3 が成立なら改行

投稿2023/04/16 19:44

編集2023/04/16 19:45
jimbe

総合スコア12648

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

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

0

やりかたはいくらもあるけどその一例

Java

1public class PracticeFor { 2 public static void main(String[] args) { 3 int n = 12; 4 for (int i = 0; i < n; i++) { 5 int x = i % 4; // ヨコ 6 int y = i / 4; // タテ 7 // x+y が偶数なら白/奇数なら黒 8 System.out.print( (x+y)%2 == 0 ? '□':'■'); 9 if ( x == 3 ) { // 横に4つ並んだら改行 10 System.out.println(); 11 } 12 } 13 } 14}

投稿2023/04/16 08:54

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問