Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > StringBuffer


Автор: ___Yuri 23.9.2005, 09:45
Массив пытаюсь заполнить объектами StringBuffer и потом выдать содержимое на экран. Не проходит - почему не понимаю. smile

Код:
Код

public static void main(String[] args)
    {
        final int ML=10;
//create
        StringBuffer [][][] tda = new StringBuffer [ML][][];
        for (int i = 0; i < ML; i++)
            {
            tda[i]= new StringBuffer [ML -i][];
            }

        for (int i = 0; i < ML; i++)
        for(int j = 0; j < ML - i; j++)
            {
            tda [i][j] = new StringBuffer [(i+1)*(j+1)];
            }
            
        
//append
        String s;
        for (int i = 0; i < ML; i++)
        for (int j = 0; j < ML - i; j++)
        for (int k = 0; i < (i+1)*(j+1); k++)
            {
                s = tda[i][j][k].append("x= ").append(i).append("y= ").append(j).append("z= ").append(k).toString();
                System.out.println(s);
            }    
    }


Выдает ничто иное как :
Exception in thread "main" java.lang.NullPointerException
at arr.main(arr.java:38)
Объясните pls подробно smile

Автор: allex 23.9.2005, 09:53
А причем тут StringBuffer? tda[i][j][k] == null
Ошибка здесь: for (int k = 0; i < (i+1)*(j+1); k++)

Автор: ___Yuri 23.9.2005, 10:15
Не помогает! Тут багнул - согласен.
Возмущается на строку:
s = tda[i][j][k].append("x= ").append(i).append("y= ").append(j).append("z= ").append(k).toString();
smile
Добавлено @ 10:17
Т.е. на строку 24 в отредактированной части кода...
Пишет то же самое:
Exception in thread "main" java.lang.NullPointerException

Автор: anonymouse 23.9.2005, 10:33
Ну правильно пишет. Ты инстанцию массива создал а самого StringBuffera нет
(где new StringBuffer() smile )

Автор: batigoal 23.9.2005, 10:54
На самом деле, я ни черта не понял из кода, что ты хочешь сделать.

Автор: ___Yuri 23.9.2005, 10:56
Вставил в 23:
tda[i][j][k] = new StringBuffer(); - по идее создаю свой String Buffer для каждой ячейки.
- правильно?
Знаю, что неправильно. Срабатывает раз и останавливается. Куда его?
Добавлено @ 10:59
Lamer George, я хочу создать "кривой" 3 мерный массив с об. типа StringBuffer и заполнить его тройкой соответствующих координат

Автор: batigoal 23.9.2005, 11:10
Вот простой пример для двухмерного массива:
Код

public class C
{
    public final static int MAX_LENGTH = 10;
    
    public static void main(String[] args)
    {
        StringBuffer [][] tda = new StringBuffer[MAX_LENGTH][];
        for(int i=0; i<MAX_LENGTH; i++)
        {
            tda[i] = new StringBuffer [i+1];
            for(int j=0; j<tda[i].length; j++)
            {
                tda[i][j] = new StringBuffer("x = ");
                tda[i][j].append(i);
                tda[i][j].append(", y = ");
                tda[i][j].append(j);
                tda[i][j].append(" | ");
                System.out.print(tda[i][j].toString());
            }
            System.out.println();
        }
    }
}

Автор: anonymouse 23.9.2005, 11:19
Код

    public static void main(String[] args) {
        final int ML = 10;
        // create
        StringBuffer[][][] tda = new StringBuffer[ML][][];
        for (int i = 0; i < ML; i++) {
            tda[i] = new StringBuffer[ML - i][];
        }
        for (int i = 0; i < ML; i++)
            for (int j = 0; j < ML - i; j++) {
                tda[i][j] = new StringBuffer[(i + 1) * (j + 1)];
            }

        // append
        String s;
        for (int i = 0; i < ML; i++)
            for (int j = 0; j < ML - i; j++)
                for (int k = 0; k < (i + 1) * (j + 1); k++) {
                    tda[i][j][k]=new StringBuffer();
                    s = tda[i][j][k].append("x= ").append(i).append("y= ")
                            .append(j).append("z= ").append(k).toString();
                    System.out.println(s);
                }
    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)