Странные проблемы со строками в Java - PullRequest
0 голосов
/ 01 мая 2011

Я новичок в JAVA и нашел некоторые из ее концепций очень раздражающими, и, как бы я ни старался, я не могу найти подходящего объяснения этому поведению ... конечно, есть проблемы вокруг этих проблем, но все же я хочу знать я упускаю что-то очень простое здесь или JAVA, как это ???

  1. У меня есть строковый массив в одном из моих классов A, и я хочу, чтобы он был заполнен с помощью метода другого класса B ... поэтому я создаю объект класса B в A, вызываю метод B.xyz и приравниваю это в строку arra, но БУМ, я не могу это сделать .... Java выдает исключение nullpointer .......... Я не знаю, почему ...

.

public class B{
    public void xyz() {
         String[] mystrings=new String[70];
         for(int i=0;i<5;i++)
             mystrings[i]=value;    
         return mystrings;
    }
}

public class A {
   public void abc() {

      B b=new B();
      String[] StringList;
      StringList=b.xyz();
      System.out.println(StringList.length);
   }
}

У меня есть похожий фрагмент кода, к сожалению, длина StrinList становится равной 70 .... если я хочу напечатать все строки этого массива, у меня нет другого пути ... помните, хотя размер mystring равно 70 в классе B, только 5 его компонентов правильно инициализированы ........ ТАК, учитывая, что я нахожусь в классе A и не могу узнать, сколько раз выполнялся цикл for в B ..... Как мне точно пройти через все элементы StringList в A .........

PS: Есть обходные пути для решения этой проблемы, но я хотел бы знать, почему это происходит, то есть почему атрибут длины не изменяется в соответствии с инициализированными компонентами ??

Ответы [ 4 ]

4 голосов
/ 01 мая 2011

Если вам нужен только массив длиной 5, то только инициализируйте его как этот размер, например:

public String[] xyz(String value) {
    String[] mystrings = new String[5];
    for (int i = 0; i < mystrings.length; i++) {
        mystrings[i] = value;
    }
    return mystrings;
}

Если вам нужен массив, который вы можете расширить, вам следует рассмотреть возможность использования ArrayList вместо.Например:

public List<String> abc(String value) {
    List<String> list = new ArrayList<String>();
    for (int i = 0; i < 5; i++) {
        list.add(value);
    }
    return list;
}

Затем вы можете получить его размер, добавить к нему и напечатать элементы следующим образом:

List<String> list = abc("foo");
System.out.println(list.size());
list.add("bar");
for (String value : list) {
    System.out.println(value);
}

Надеюсь, что поможет.

1 голос
/ 01 мая 2011

Вы объявили xyz как метод с типом возврата void в классе B. Предположительно, вам нужна подпись, которая возвращает строковый массив, public String[] xyz()

Также вы неправильно объявили массив в B, правильное объявление:

String[] myStrings = new String[70];

- Дан

0 голосов
/ 01 мая 2011

Я предлагаю вам взглянуть на использование List как ArrayList, поскольку это оборачивает массивы, чтобы их было проще использовать.

String[] mystrings[70];

Это создает массив или массивы.Есть два []

Я предлагаю вам попробовать вместо этого.

String[] mystrings = new String[5];
0 голосов
/ 01 мая 2011
 String[] mystrings = new String[5]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...