繁体   English   中英

ArrayList在do..while循环中未按预期工作

[英]ArrayList not working as expected in do..while loop

我有以下循环创建一个完全适合屏幕的字符串,可以说创建了一个页面。

    for (int i = 0; i < totalLine; i++) {

        temp = enterLine(mTextView, textToBeShown, i);
            full = full + temp;

    }

因此,在完成迭代后, full将占据一页。

我想做的是创建一个外部迭代,该迭代使我可以创建多个页面,但未定义要创建的页面数量。 因此,如果没有更多页面要创建,则迭代必须停止。

我尝试了以下代码,但是由于某些原因,在调用页面Pages.get(1)它给出了整个String而不只是full / Page。 例如,如果我三根弦都被添加到ArrayList 页面会出现在三根弦ArrayList ,但都具有相同的价值。

通过Log一些测试,我知道第一次迭代运行良好,并且full给出了期望值,这意味着在第一次do迭代中给出了期望值到full ,而第二次迭代等等。

    do{
    for (int i = 0; i < totalLine; i++) {

        temp = enterLine(mTextView, textToBeShown, i);
        if(temp.trim().length() == 0){
            break;
        }else{
            full = full + temp;
        }
    }
    Pages.add(full);

所以问题是我在ArrayList做错了什么,为什么它不能按我期望的那样工作。

编辑

这是enterLine代码:使用了更多Log并不需要全部显示它们。

public String enterLine(TextView mTextView, String textBeShown, int i){

        String A;
        int number = mTextView.getPaint().breakText(textToBeShown, 0, textToBeShown.length(),true,mTextView.getWidth(), null);

        if(textToBeShown.substring(number-1,number) != " "){
            number = textToBeShown.substring(0,number).lastIndexOf(" ");
            Log.e("TAG1", "Found " + i);
        }

        A = (textToBeShown.substring(0, number) + "\n");
        Log.e(TAG, textToBeShown.substring(0, number));
        textToBeShown = textToBeShown.substring(number, textToBeShown.length());
        return A;
    }

从外观上看,它不是您的arraylist,而是您的循环。 Add将一个元素添加到arraylist,get(index)从列表中获取第index个元素。 没问题。

您的问题是它在循环后将完整内容添加到页面中,到此为止,完整内容已包含所有内容。 将pages.add放入循环中,它将得到修复。 确保您在每次迭代时都将其重置为完整状态。 在循环的开始处放入full =“”。 那应该工作。

do{
    full=""
    for (int i = 0; i < totalLine; i++) {
        temp = enterLine(mTextView, textToBeShown, i);
        if(temp.trim().length() == 0){
            break;
        }else{
            full = full + temp;
        }
    }
    Pages.add(full);
}while(...)

或更好

do{
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < totalLine; i++) {
        temp = enterLine(mTextView, textToBeShown, i));
        if(temp.trim().length() == 0){
            break;
        }else{
            builder.append(temp);
        }
    }
    Pages.add(builder.toString());
}while(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM