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

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

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

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

Q&A

解決済

2回答

2274閲覧

文字列を指定の文字数で改行する

sayka

総合スコア2

Java

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

1グッド

0クリップ

投稿2023/07/28 07:42

編集2023/07/28 11:38

実現したいこと

文字数を数える変数を別に宣言して、文字を表示するごとにその変数に1を加え、その変数が30の倍数になったときに改行を出力する方法

例)入力した文字列「あいうえおかきくけこさしすせそたちつてと」
繰り返す数:3
結果:あいうえおかきくけこさしすせそたちつてとあいうえおかきくけこ 「改行」
さしすせそたちつてとあいうえおかきくけこさしすせそたちつてと

発生している問題・エラーメッセージ

文字数を数える変数をString.length()で手に入れ、その数に+1しながら増やし、30で改行入力をしているのですが、文がくりかえされるだけで改行が出力されない
String.length()の使い方をまちがっていますか?

該当のソースコード

Java

1package report; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6 7public class Report3 { 8 public static void main(String[] args) throws IOException 9 { 10 System.out.println("文字列の入力"); 11 BufferedReader br = 12 new BufferedReader(new InputStreamReader(System.in)); 13 14 String str = br.readLine(); 15 16 System.out.println("繰り返しの回数:"); 17 18 String str2 = br.readLine(); 19 20 int rep = Integer.parseInt(str2); 21 22 23for(int j=1; j<=rep; j++) { 24 System.out.print( str ); 25 } 26 int num = str.length(); 27 for(int x=1; x<=num+1; x++) { 28 if(num%30==0) { 29 System.out.print("\n"); 30 } 31 } 32 }

試したこと

文字列を配列で一文字ずつ分けて一文字ずつ見ていく方法は間違っていた。
int num以降が機能していないと思われるが、どこを修正すればよいかわからない

TN8001👍を押しています

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

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

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

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

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

TN8001

2023/07/28 10:15

「JavaFX」タグが付いていますが、「Java」タグが適切です。 質問を【編集】し、修正してください^^ BufferedReaderを2回作る必要はないですし、使ってもいないのでbr2は不要でしょう。
jimbe

2023/07/28 11:30 編集

コードをご提示されるなら、変に一部にせずに全体をご提示ください。 11~13で文が繰り返されているのを分かっているのなら、その中でどうにかしないといけないのではないでしょうか。 「文字を表示するごとにその変数に1を加え」というのも見当りませんし。 >30で改行入力をしているのですが、文がくりかえされるだけで改行が入力されない 「入力」と表現されている部分は「出力」です。 画面側から見て「入力」ならプログラム側から見て「出力」で、視点をコロコロ変えてしまうと >例)入力した文字列 の「入力」とごちゃごちゃになります。
sayka

2023/07/28 11:28

全体を公開いたしました int num = str.length(); for(int x=1; x<=num+1; x++) { if(num%30==0) { System.out.print("\n"); これで文字表示の変数に1を加えたものとしたつもりでした。
jimbe

2023/07/28 11:33 編集

全文公開ありがとうございます。 for の変数 x は何の役にも立っていませんね。
sayka

2023/07/28 11:44

表現を修正しました。ご指摘ありがとうございます。 回答を参考に、xの役割をcharAtを使って一文字ずつのカウント数としました。1 「1を加え」という指示は、∔1するのではなく、後置インクリメント演算子を用いました。      int y = 0; for(int j=1; j<=rep; j++) { int num = str.length(); for(int x=1; x<=num; x++) { System.out.print(str.charAt(x)); y++; if(y%30==0) { System.out.println(); } } } } しかしこれだと、 あいうえおかきくけこさしすせそたちつてとException in thread "main" java.lang.StringIndexOutOfBoundsException: index 20, length 20 at java.base/java.lang.String.checkIndex(String.java:4561) at java.base/java.lang.StringUTF16.checkIndex(StringUTF16.java:1624) at java.base/java.lang.StringUTF16.charAt(StringUTF16.java:1421) at java.base/java.lang.String.charAt(String.java:1515) at report.Report3.main(Report3.java:32) このようなエラーがでてしまいました。
guest

回答2

0

neko_the_shadow さんのを変数変えただけになりますが(><

num を二つの for ループの外で宣言することで、二つのループを通して文字数を数えることが出来ます。

java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4 5public class Main { 6 public static void main(String[] args) throws IOException { 7 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 8 9 System.out.println("文字列の入力"); 10 String str = br.readLine(); 11 12 System.out.println("繰り返しの回数:"); 13 String str2 = br.readLine(); 14 int rep = Integer.parseInt(str2); 15 16 int num = 0; //文字数を数える変数を宣言 17 for(int i=0; i<rep; i++) { 18 for(int j=0; j<str.length(); j++) { 19 System.out.print(str.charAt(j)); 20 num++; //文字を表示するごとにその変数に 1 を加え 21 if(num%30 == 0) System.out.print("\n"); //30 の倍数になったときに改行を表示 22 } 23 } 24 } 25}

投稿2023/07/28 11:46

jimbe

総合スコア13318

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

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

sayka

2023/07/28 12:00

宣言の位置が重要なのですね…!理解しました。 ご指摘から回答まで、お付き合いいただき誠にありがとうございました。大変参考になりました。
guest

0

ベストアンサー

  1. strをrep回繰り返した文字列を作成する
  2. 1.で作成した文字列を30文字ごとに改行して表示する。

実現したかったことは上記の認識で正しいですか? 提示いただいたコードを生かす形で、これを実現しようと思うと、以下のようなコードになると思います。

java

1int y = 0; 2for (int j = 1; j <= rep; j++) { 3 int num = str.length(); 4 for (int x = 0; x < num; x++) { 5 System.out.print(str.charAt(x)); 6 y++; 7 if (y%30==0) { 8 System.out.println(); 9 } 10 } 11}

投稿2023/07/28 09:55

neko_the_shadow

総合スコア2374

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

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

sayka

2023/07/28 10:39

回答いただき誠にありがとうございます。 課題は認識されているとおりです。 実行してみましたが以下のようなエラーが出てしまいました。 あいうえおかきくけこさしすせそたちつてとException in thread "main" java.lang.StringIndexOutOfBoundsException: index 20, length 20 at java.base/java.lang.String.checkIndex(String.java:4561) at java.base/java.lang.StringUTF16.checkIndex(StringUTF16.java:1624) at java.base/java.lang.StringUTF16.charAt(StringUTF16.java:1421) at java.base/java.lang.String.charAt(String.java:1515) at report.Report3.main(Report3.java:32)
neko_the_shadow

2023/07/28 11:51

エラーになったコードは以下のようになっていませんか? for (int x = 1; x <= num; x++) { だとすれば、これは誤りです。以下が正しいです。 for (int x = 0; x < num; x++) {
sayka

2023/07/28 11:55

できました!本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問