dポイントプレゼントキャンペーン実施中!

三つの文字を入力して、順番に並べて表示させるプログラムが作りたいのですが、どうしたらいいのかわかりません。
二つまではできました。以下に記します
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 となる風にしたいです。

A 回答 (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"));
}

補足日時:2011/06/04 20:47
    • good
    • 1
この回答へのお礼

括弧内のダブルクォーテーションを抜いたら出来ました!
自分流にでも作れて、他の参考も教えてくださりありがとうございました。

お礼日時:2011/06/04 20:50

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つ以上に増えてもやり方は同じです。

この回答への補足

(3)~(4)についてはfor文で二重ループにしてやるのがいいのでしょうか?

補足日時:2011/06/04 11:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!