0

1 から無制限の文字数を含むことができる 1 つのフィールドがあります。最大 3 つのメッセージを送信するように制限したい (つまり、最小 1 最大 3)。したがって、最大 480 文字です。各メッセージを (0-160; 160-320; 320-480 から) 個別にリスト (出力に書き込み) したいのですが、480 以上は私の関心事ではありません。

私のクラスは、たとえば500文字の場合は機能しますが、例のように文字数が少ない場合は機能しません。

 String message="message to sent";
 int m=message.length();


b=160;
int c=m/b;


int bi=0;
int ei=160;



for (int i = 0; i < c; i++) {
    while (ei<=480)
    {
    System.out.println("\n"+message.substring(bi, ei));
    bi=bi+160;
    ei=ei+160;
    }
}

これを完全に機能させ、メッセージ内の文字数が少ない場合や大きなメッセージの場合、何を修正する必要がありますか? ありがとうございました

4

3 に答える 3

3
int c=m/b;

cにキャストされている間は切り捨てられるintため、number of sms - 1ifm < bになります。次のように記述します。

int c = (int) Math.ceil((double) m/b);

または、mbが正であるため:

int c = (m+b-1)/b;

さらに、ループオーバーできる各メッセージブロックを表示したい場合は、二重ループの目的がわかりませんc:

for(int i = 0; i < c && i < 3; i++) {
    int start = i*b;
    int end = Math.min( (i+1)*b, m);
    System.out.println( message.substring(start, end) );
}

または、次をループできますoffset

for(int offset = 0; offset<b*c && offset<b*3; offset+=b) {
    System.out.println( message.substring(offset , Math.min(m, offset+b) ) );
}

しかし、両方を行うことはできません。

于 2013-04-29T14:51:53.993 に答える
0

このコードにはかなり多くの誤りがあります。

  1. zakinster が既に回答したように、 ifにm/b切り捨てられるため、 for ループが実行されることはありません0m < b
  2. 二重ループは不要であり、問​​題 1 を解決するとすぐに問題が発生します。
  3. メッセージの終わりをテストしません

最後の二重ループを次のように置き換えることをお勧めします。

int offset = 0;
int length;

while (offset < 480 && offset < m) {
    length = Math.min(160, m - offset);
    System.out.println("\n"+message.substring(offset, offset+length));
    offset += 160;
}
于 2013-04-29T15:01:14.080 に答える