копирование значений массива из одного класса в другой - PullRequest
1 голос
/ 22 марта 2011

Я застрял со следующей проблемой,

У меня есть два класса, первый - readFromFile, а второй - newClass

readFromFile .java -

  • Это читает текстовый файл
  • Разбирает строки текста в отдельные строки
  • Значения этих строк хранятся в String [] с именем dArray
  • Для тестирования я распечатал все значения и все работает

newClass .java

  • Этот класс предназначен для копирования значения строки [] dArray в новую строку и оттуда использует значения (для простоты все, что я включил в newClassэто код, относящийся к копированию массива)
  • Что я делаю неправильно, так это то, что я возвращаю dArray , но он возвращает массив, в котором ничего не хранитсяпоэтому мне либо нужен способ вызова метода main из readFromFile.class / help для создания метода в readFromFile, который работаетСделайте то же самое, что я звоню с основного

, пожалуйста, помогите

 import java.util.Scanner;
import java.io.*;

public class readFromFile
{
static String[] dArray = new String [30];

   public static void main (String[] args) throws IOException
   {
      String part;
      Scanner fileScan, partScan;
      int i = 0;
      int x = 0;

     fileScan = new Scanner (new File("C:\\stuff.txt"));

     // Read and process each line of the file
      while (fileScan.hasNext())
      {
         part = fileScan.nextLine();

         partScan = new Scanner (part);
         partScan.useDelimiter(":");

         while ( partScan.hasNext()){
         dArray[i] = partScan.next();
         i++;
         }
      }
        for (x = 0;x<i;x++)
       { System.out.println(dArray[x]);
   }


   }   
        public String[] getArray()
  {
  return dArray;
           }}

newClass.java

public class newClass {

  readFromFile results = new readFromFile();// creating object from class readFromFile


 public void copyArray() { 

       String[] dArray = results.getArray();  // Trying to return the values of String [] dArray from rr classs  
                         //Method getArray in rr class is  
                         //  public String[] getArray()
                         // { return dArray; } 

        String[] arrayCopy = new String[dArray.length];

        System.arraycopy(dArray, 0, arrayCopy, 0, dArray.length);

        for (int i = 0; i < arrayCopy.length; i++)
            System.out.println(arrayCopy[i]);

    }


    public static void main(String[] args) {
       newClass.copyArray();
    }
}

Ответы [ 3 ]

1 голос
/ 22 марта 2011

Генерация ваших результатов в readFromFile.main (), но вы ожидаете вызвать его в readFromFile (). Вам нужно создать конструктор для readFromFile и вызвать его также в вашем основном методе.

0 голосов
/ 22 марта 2011
  1. Удалите статическое ключевое слово перед вашей dArray переменной
  2. Измените public static void main(String[] args) throws IOException в вашем первом классе на public readFromFile() throws IOException. Держите код внутри себя таким же.
  3. Измените строку newClass.copyArray(); во втором классе на (new newClass()).copyArray();
  4. Переместите строку во втором классе readFromFile results = new readFromFile(); в метод public void copyArray().
  5. Измените public void copyArray() во втором классе на public void copyArray() throws IOException
  6. Поместите блок try..catch вокруг вашего кода в метод main второго класса. то есть изменить (new newClass()).copyArray(); на что-то вроде try { (new newClass()).copyArray(); } catch (IOException e) { e.printStackTrace(); }

Вышесказанное должно заставить ваше дело работать, но дружеским примечанием будет экспериментировать с кодом (как только он заработает), поскольку это отличный пример для понимания того, как используются static ключевые слова, как обрабатываются или генерируются исключения, и как используется IO. ;)

0 голосов
/ 22 марта 2011

Проблема в том, что у обоих классов есть метод main. Только класс, который вы намереваетесь запустить, должен иметь метод main, другим классам нужны только конструкторы. Если вы хотите запустить непоказанный класс, он будет написан следующим образом.

public class ThirdClass{
public static void main(String[] args) {
   readFromFile reader = new ReadFromFile();
   newClass copy = new newClass();

   reader.readFromFile();
   String[] strings = reader.getArray();

   copy.copyArray(strings)

}

Чтобы это работало, вам нужно поместить весь код в основную часть readFromFile в метод с именем «readFromFile». и вам нужен метод в newClass, который принимает массив строк в качестве аргумента. Или конструктор, который принимает массив строк.

Убедитесь, что ни у одного из них нет основных методов, иначе он не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...