三つの文字を入力して、順番に並べて表示させるプログラムが作りたいのですが、どうしたらいいのかわかりません。
二つまではできました。以下に記します
import java.io.*;
class Sample
{
public static void main(String args[]) throws IOException
{
System.out.println("文字列1を入力してください。");
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String str1=br.readLine();
System.out.println("文字列2を入力してください。");
String str2=br.readLine();
int s = 1,t = 0;
if(str1.length()>str2.length()){
int len=str1.length();
StringBuffer sb=new StringBuffer(str1);
while(s<len+1){
sb.insert(s,str2.charAt(t));
s=s+2;
t++;
}
System.out.println("文字列は"+sb+"となる。");
}else{
int len=str2.length();
StringBuffer sb=new StringBuffer(str2);
while(s<len+1){
sb.insert(s-1,str1.charAt(t));
s=s+2;
t++;
}
System.out.println("文字列は"+sb+"となる。");
}
}
}
str1に123 str2に45といった風に入力すると14253といった風になります。
これにstr3を加え、str3が6789ならば、146257389 となる風にしたいです。
No.2ベストアンサー
- 回答日時:
> for文で二重ループにしてやるのがいいのでしょうか?
forでも何でも、お好きな書き方でどうぞ。
再帰を使ってこんなこともできます。
public static void main(String[] args) {
System.out.println(mix("123","45","6789"));
}
static StringBuffer mix(String str1, String str2, String str3) {
return mix_n(str1, str2, str3, 0);
}
static StringBuffer mix_n(String str1, String str2, String str3, int n) {
StringBuffer sb = new StringBuffer();
if (n < str1.length()) sb.append(str1.charAt(n));
if (n < str2.length()) sb.append(str2.charAt(n));
if (n < str3.length()) sb.append(str3.charAt(n));
return (sb.length() > 0) ? sb.append(mix_n(str1, str2, str3, n+1)) : sb;
}
この回答への補足
一度このプログラムで文字列をキーボードから入れるように試してみたのですが、
文字列1を入力してください
123
文字列2を入力してください
45
文字列3を入力してください
6789
sssttt123
こんな風になってしまいました。
これは何が原因なのでしょうか?
main内を以下のようにいじりました
public static void main(String[] args) throws IOException
{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("文字列1を入力してください");
String st1=br.readLine();
System.out.println("文字列2を入力してください");
String st2=br.readLine();
System.out.println("文字列3を入力してください");
String st3=br.readLine();
System.out.println(mix("st1","st2","st3"));
}
No.1
- 回答日時:
3つの文字列の長さの大小を比べる方法だと場合分けが大変になるので、発想を変えます。
(1) StringBuffer sbを空にする
(2) nを0にする
(3) m (=1,2,3)について、n < str_m.length()ならばstr_mのn文字目をsbの末尾に追加する
(4) (3)でsbに1文字以上追加していたらnを1増やして(3)へ戻る
(6) sbを出力して終了
これなら、文字列が4つ以上に増えてもやり方は同じです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- 英語 文法的解釈を教えてください 1 2023/06/22 10:05
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- 経済学 これカバーなし購買力平価の式らしいのですが、 iが1年後の自国の金利で、i*が外国の1年後の金利で、 3 2023/06/08 17:13
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
eclipseでmysqlからテーブル情...
-
java連結
-
Servletでテキストボックスに入...
-
テキストファイルから空白行をよむ
-
javaでCSVの中身から最大値を表...
-
BufferedReaderでのエラー
-
csv出力について
-
FileクラスのcanRead/canWrite...
-
ORA-01858: 数値を指定する箇所...
-
C言語のポインターに関する警告
-
ダブルクォーテーションのrepla...
-
VBAで配列の計算
-
JSPやサーブレットでSystem.out...
-
flush()とclose()について
-
System.err. printlnとSystem.o...
-
javaで質問です。 文字列2023/2...
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
テキストファイルから空白行をよむ
-
Java int sum = 0は必要ですか?
-
[JAVA]エラーが解決できません。
-
javaのfor文が機能してないみた...
-
InputStream.read()でタイムア...
-
Servletでテキストボックスに入...
-
Javaでデータに登録する度にID...
-
Inputstreamについて
-
BufferedReaderでのエラー
-
FileクラスのcanRead/canWrite...
-
Java 読み込んだテキストファイ...
-
Javaの質問です。テキストファ...
-
java連結
-
Class.forNameでエラーになる
-
テキストファイルの任意の文字...
-
テキストファイルにおいて任意...
おすすめ情報