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


Автор: Syltan 22.5.2010, 20:48
Подскажите, как можно создать на Яве масив из строк?
Пробую так не выхдит.
Код

char privet[];
privet = new char[]={'Петя','Вася','Коля','Дима'};

Автор: godvinn 22.5.2010, 22:44
Код

String strArr[] = {"test_1", "test_2", "test_2"}; 

может так 

Автор: Syltan 23.5.2010, 00:26
Да, спс.
Так как тема относится к масивам ещё возник небольшой вопрос.

Не рабоатет такой код.
Код

package java2;
public class Main {
    public static void main(String[] args) {
    int  d[][] = new int[4][];
    d[0]=new int[1];
    d[1]=new int[2];
    d[2]=new int[3];
    d[3]=new int[4];
    for(int i=0; i<d.length; i++){
        for(int j=0; j<d.length; j++)
        System.out.print(d[i][j]+" ");
    }
    }
  }


Программа должна выводить масив, с рахзным количеством столбцов.
В первой строке должен быть 1 столбец, 2-ой - 2 столбца, 
3-ей - 3 столбца, 4-ой - 4. программа не хочет работать.

Автор: Nofate 23.5.2010, 00:42
замените
Код

for(int j=0; j<d.length; j++)

на
Код

for(int j=0; j<d[i].length; j++)

Автор: duk 23.5.2010, 00:45
Ничего не понятно про то, как именно должна работать программа (про столбцы ничего не понял). По примеру догадался, что наверное так:
Код

package java2;

public class Main {
    public static void main(String[] args) {
        int d[][] = new int[4][];
        d[0] = new int[] { 1 };
        d[1] = new int[] { 1, 2 };
        d[2] = new int[] { 1, 2, 3 };
        d[3] = new int[] { 1, 2, 3, 4 };
        for (int i = 0; i < d.length; i++) {
            for (int j = 0; j < d[i].length; j++) {
                System.out.print(d[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Автор: Syltan 23.5.2010, 14:32
Объясните вот эту строку.
Код

d[0] = new int[] { 1 };


Автор: pathfinder 23.5.2010, 15:14
Создание массива и одновременное его заполнение(ака синтаксический сахар).

Код duk-а можно переписать еще чуть-чуть короче.

Код

package java2;
public class Main {
    public static void main(String[] args) {
        int d[][] = { {1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4} };
        for (int i = 0; i < d.length; i++) {
            for (int j = 0; j < d[i].length; j++) {
                System.out.print(d[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Автор: Syltan 23.5.2010, 15:58
Вот ещё ещё очень простой код, не работает. пробую деолать.
Код

package java2;
public class Main {
    public static void main(String[] args) {
    String b="Маша";
    if("Маша".equals(b)) System.out.println(b);
    else System.out.println("Плохо Петя");
    else if("дядя".equals(b))
        System.out.println("Очень плохо Петя");

        }
    }
  
 

Автор: duk 23.5.2010, 16:00
Syltan, лучшим способом для тебя, есть чтение литературы. Купи, или если нету денег выкачай замечательный двухтомник Хорстмана и Корнела: Core Java. Там все базовые вещи классно описаны + есть описание всяких штук посложнее. Судя по всему тебе нужно читать с самого начала.

Разбирай примеры, и если будут возникать вопросы пиши сюда или в личку. С удовольствием тебе отвечу.

Автор: pathfinder 23.5.2010, 16:04
За такой стиль кодирования надо бить морду в обязательном порядке.

Если расставит {} в приведенном коде сразу же ошибку Syltan найдет.

Автор: Syltan 23.5.2010, 16:09
Чего-то не срабатывает,   если отдельно написать 2 ифа, тогда нормально, я просто хотел именно чтоб попробовать проексепрементировать  с повторениями else if, чего-то мой код не работает. Если 1 оператор идёт после ифа, поэтому я и не ставил блоковые скобки.

Автор: duk 23.5.2010, 16:22
Код

package java2;

public class Main {
    public static void main(String[] args) {
        String b = "Маша";
        if ("Маша".equals(b)) {
            System.out.println(b);
        } else if ("дядя".equals(b)) {
            System.out.println("Очень плохо Петя");
        } else {
            System.out.println("Плохо Петя");
        }
    }
}


Добавлено через 1 минуту и 9 секунд
pathfinder, не нужно никого бить в морду хД. 

Если у человека есть желание, не надо его отбивать. Пускай учится.

Автор: Syltan 23.5.2010, 16:39
Спасибо Дук! Значит всё-таки, нужно во вложенные скобки брать ифы чтоб писать после одного из ифов выражение }else if и т.д.?


Да, вот ещё попробовал проексперментировать, сработало.
Код

package java2;

public class Main {
    public static void main(String[] args) {
        String b = "Джин";
        if ("Маша".equals(b)) {
            System.out.println(b);
        } else if ("дядя".equals(b)) {
            System.out.println("Очень плохо Петя");
        } else if("Петро".equals(b)) {
         System.out.println("Плохо Петя"); }
        else if("Джин".equals(b)){
            System.out.println("Получи приз от Джина!"); }
            }
    }



Хотя конечно такое не использует никто, все оператора выбора switch юзают для такого.

Добавлено через 10 минут и 43 секунды
Вопрос возник. Почему во втором форе такой предел стоит?
Код


        for (int i = 0; i < d.length; i++) {      //с о-левого элемнета строки по длину столбцов
            for (int j = 0; j < d[i].length; j++) { //А здесь как рсшифровать ?


Автор: duk 23.5.2010, 16:59
По-порядку:
Можно написать и так:
Код

package java2;

public class Main {
    public static void main(String[] args) {
        String b = "Маша";
        if ("Маша".equals(b))
            System.out.println(b);
        else if ("дядя".equals(b))
            System.out.println("Очень плохо Петя");
        else
            System.out.println("Плохо Петя");
    }
}


Сравни со своим кодом. Последний else у тебя не ни с чем не связан.

Цитата(Syltan @  23.5.2010,  16:39 Найти цитируемый пост)
Хотя конечно такое не использует никто, все оператора выбора switch юзают для такого.


switch со строками не работает.

Цитата(Syltan @  23.5.2010,  16:39 Найти цитируемый пост)
Вопрос возник. Почему во втором форе такой предел стоит?
Выделить всёкод Java
1:
2:
    
        for (int i = 0; i < d.length; i++) {      //с о-левого элемнета строки по длину столбцов
            for (int j = 0; j < d[i].length; j++) { //А здесь как рсшифровать ?


Потому что каждый элемент массива d -- тоже массив (d[0], ..., d[3] -- массивы и для их прохода нам необходимо знать размер).

Добавлено @ 17:02
Мы могли бы написать и так:
Код

package java2;
public class Main {
    public static void main(String[] args) {
        int d[][] = new int[4][];
        d[0] = new int[] { 1 };
        d[1] = new int[] { 1, 2 };
        d[2] = new int[] { 1, 2, 3 };
        d[3] = new int[] { 1, 2, 3, 4 };
        for (int i = 0; i < d.length; i++) {
            int[] arr = d[i];
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[j] + " ");
            }
            System.out.println();
        }
    }
}

Автор: Syltan 23.5.2010, 17:30
Прошу прощения, а как это так одномерному масиву присвоить двумерный?
Код

int[] arr = d[i];

А потом вывести двумерный через одномерный.

Автор: duk 23.5.2010, 17:52
int[] arr - одномерный массив. d - массив массивов -- каждый его элемент хранит ссылку на одномерный массив.

Тут идет присваивание элементам массива d, ссылок на одномерные массивы.
Код

        d[0] = new int[] { 1 };                одномерный массив состоящий из одного элемента (1)
        d[1] = new int[] { 1, 2 };            одномерный массив состоящий из двух элементов (1, 2)
        d[2] = new int[] { 1, 2, 3 };        одномерный массив состоящий из трех элементов (1, 2, 3, )
        d[3] = new int[] { 1, 2, 3, 4 };    одномерный массив состоящий из четырех элементов (1, 2, 3, 4)

Автор: Syltan 23.5.2010, 19:42
Забыл спросить за предыдущим разом. А эта строка.
Код

 for(int j = 0; j < d[i].length; j++){

Означает с нуля по длину строки 2-мерного масива?

Автор: duk 23.5.2010, 20:10
Мы просто берем и пробегаем наш основной массив d. в каждом элементе которого хранится ссылка на другой массив.
Посмотри  на то, как мы заполнили массив d.

Код

        int d[][] = new int[4][];
        d[0] = new int[] { 1 };
        d[1] = new int[] { 1, 2 };
        d[2] = new int[] { 1, 2, 3 };
        d[3] = new int[] { 1, 2, 3, 4 };
        for (int i = 0; i < d.length; i++) {
            int[] arr = d[i];   Обрати внимание на это. arr - обычный одномерный массив (вектор)
            for (int j = 0; j < arr.length; j++) {  первый массив, который сюда попадет будет иметь длину 1, второй - 2, итд.
                System.out.print(arr[j] + " ");
            }
            System.out.println();
        }

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