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

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

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

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

4回答

1201閲覧

kotlinで同じ文字列をconsoleで4つ四角形になるように出力したい。

jta.sat

総合スコア10

Java

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/03/22 06:05

編集2020/03/22 07:41

##実現したいこと。

文字列"tabemono"を

tabemono
a   n
b  o
e   m
m e
o b
n a
onomebat

上記のような形でconsole上に出力したいです。

##今現在試したこと

kotlin

1fun main(args: Array<String>) { 2 3 val tabemono = "tabemono" 4 5 6 println(tabemono) 7 8 var eat = arrayOf("a","b","e","m","o","n","o") 9 10 for(i in eat) 11 {println(i)} 12 13 val numberList = listOf("t","a","b","e","m","o","n","o") 14 15println(numberList.foldRight("") { value, initial -> initial + value }) 16 17 18 19} 20 21 22//出力結果 tabemono 23 //a 24 //b 25 //e 26 //m 27 //o 28 //n 29 //onomebat

上記のように縦左側と横と下の出力はできたのですが、
縦右側の文字を出力する方法がわからず困っております。
指定の位置に1文字ずつ取得して出力する方法がわかりません。
どのようにすれば出力できるかご教授ください。

よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

java もアリなんですか^^;
reverse したのと順に並べてるだけなんですが orz

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 String tabemono = "tabemono"; 6 String onomebat = new StringBuilder(tabemono).reverse().toString(); 7 System.out.println(tabemono); 8 for(int i=1; i<tabemono.length()-1; i++) { 9 System.out.print(tabemono.charAt(i)); 10 for(int j=1; j<tabemono.length()-1; j++) System.out.print(' '); 11 System.out.println(onomebat.charAt(i)); 12 } 13 System.out.println(onomebat); 14 } 15}

kotlin にしてみる...同じ (面白い方法が思いつきません orz)

kotlin

1fun main(args: Array<String>) { 2 val tabemono = "tabemono" 3 val onomebat = tabemono.reversed() 4 println(tabemono) 5 for(i in 1..tabemono.length-2) { 6 println(tabemono[i]+" ".repeat(tabemono.length-2)+onomebat[i]) 7 } 8 println(onomebat) 9}

投稿2020/03/22 15:18

編集2020/03/22 15:48
jimbe

総合スコア13209

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

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

jta.sat

2020/03/23 01:52

ご回答ありがとうございます。 実際に動きを試してみました。 こんなに短いコードで実装できることを知り、勉強になりました。 ありがとうございました。
guest

0

ベストアンサー

全て ' ' で埋めた Char 型の2次元配列を作ったあとに、tabemono を配置すれば実装できます。

kotlin

1fun main() { 2 val tabemono = "tabemono" 3 val n = tabemono.length 4 val tabemono_matrix = Array(n) {Array(n) {' '}} 5 for (i in 0..n-1) { 6 tabemono_matrix[0][i] = tabemono[i] 7 tabemono_matrix[i][0] = tabemono[i] 8 tabemono_matrix[n - 1][n - 1 - i] = tabemono[i] 9 tabemono_matrix[n - 1 - i][n - 1] = tabemono[i] 10 } 11 for (i in tabemono_matrix) { 12 for (j in i) { 13 print(j) 14 } 15 println() 16 } 17} 18

実行結果

text

1tabemono 2a n 3b o 4e m 5m e 6o b 7n a 8onomebat 9

投稿2020/03/22 10:16

Paalon

総合スコア266

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

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

jta.sat

2020/03/23 01:44

ご回答いただきありがとうございます。 無事実装することができました。
guest

0

タグに Java があるので、Java で書いてみました。

Java

1import java.util.Arrays; 2 3class Main { 4 public static void main(String[] args) { 5 String s = "tabemono"; 6 7 int n = s.length() + 1, m = n * (n-1); 8 char[] a = new char[m]; 9 Arrays.fill(a, ' '); 10 for (int i = 0, j = 0, k = --m; m > 0; j += n, m -= n) { 11 a[i] = a[j] = a[m-1] = a[--k] = s.charAt(i++); 12 a[m] = '\n'; 13 } 14 System.out.print(a); 15 } 16}

最初 a[k--] だったのを a[--k] に修正しました。

投稿2020/03/22 14:09

編集2020/03/22 16:16
kazuma-s

総合スコア8224

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

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

jta.sat

2020/03/23 01:48

ご回答ありがとうございます。 今回実装してみて、kotlinでのやり方と若干の違いを感じたので、 教えていただいたやり方も試して、動きを確認させていただきます。
guest

0

String#format()とzip()とreversed()で実装してみた。

けれど、Paalonさんの回答とおりにはなるけれど、「実現したいこと」は中間の行のあいだに挟まる空白の数がランダムらしいので、テストは通せなかった。nのうしろに空白があったりもするし。わたしが仕様をただしく読み取れていない可能性大。

kotlin

1import org.junit.Assert 2import org.junit.Test 3 4class xxOogiri { 5 // 6 private fun mkBox(text: String): List<String> { 7 val fmt = "%s%${text.length - 1}s" // 編集書式 8 val midChars = text.toList().drop(1).dropLast(1) 9 val midLines = 10 midChars.zip(midChars.reversed()) 11 .map { (a, b) -> fmt.format(a, b) } 12 // 13 return listOf(text) + midLines + listOf(text.reversed()) 14 } 15 16 @Test 17 fun 想像した結果のテスト_Paalonさんの回答() { 18 // 19 val expect = """ 20tabemono 21a n 22b o 23e m 24m e 25o b 26n a 27onomebat 28 """.trimIndent() 29 30 val actual = mkBox("tabemono").joinToString("\n") 31 println(actual) 32 33 Assert.assertEquals(expect, actual) 34 } 35 36 @Test 37 fun 実現したいこと_のテスト() { 38 // 39 val expect = """ 40tabemono 41a   n 42b  o 43e   m 44m e 45o b 46n a 47onomebat 48 """.trimIndent() 49 50 val actual = mkBox("tabemono").joinToString("\n") 51 println(actual) 52 53 Assert.assertEquals(expect, actual) 54 } 55}

投稿2020/03/22 12:00

編集2020/03/23 12:06
shiketa

総合スコア4061

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

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

jta.sat

2020/03/23 01:46

ご回答いただきありがとうございます。 中間の行のあいだに挟まる空白の数は固定文字の認識で質問しました。 私の質問の仕方が悪く、中間の行のあいだに挟まる空白の数がランダムと 捕らえられたようで申し訳ございません。 今後質問する際はより回答者が答えやすいように心がけます。
jimbe

2020/03/23 02:46

画面の表示をご提示の場合は, マークダウンで言語名をplain textとすると固定幅フォントになりますので見易くなります. (Paalon さんの実行結果) 入力の際にもプレビューで位置を確認しながら出来ると思いますので, ご活用ください.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問