実現したいこと
文字数を数える変数を別に宣言して、文字を表示するごとにその変数に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以降が機能していないと思われるが、どこを修正すればよいかわからない
「JavaFX」タグが付いていますが、「Java」タグが適切です。
質問を【編集】し、修正してください^^
BufferedReaderを2回作る必要はないですし、使ってもいないのでbr2は不要でしょう。
コードをご提示されるなら、変に一部にせずに全体をご提示ください。
11~13で文が繰り返されているのを分かっているのなら、その中でどうにかしないといけないのではないでしょうか。
「文字を表示するごとにその変数に1を加え」というのも見当りませんし。
>30で改行入力をしているのですが、文がくりかえされるだけで改行が入力されない
「入力」と表現されている部分は「出力」です。
画面側から見て「入力」ならプログラム側から見て「出力」で、視点をコロコロ変えてしまうと
>例)入力した文字列
の「入力」とごちゃごちゃになります。
全体を公開いたしました
int num = str.length();
for(int x=1; x<=num+1; x++) {
if(num%30==0) {
System.out.print("\n");
これで文字表示の変数に1を加えたものとしたつもりでした。
全文公開ありがとうございます。
for の変数 x は何の役にも立っていませんね。
表現を修正しました。ご指摘ありがとうございます。
回答を参考に、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)
このようなエラーがでてしまいました。
回答2件
あなたの回答
tips
プレビュー