2015-12-21 3 views
-1

Все, у меня есть то, что кажется простой проблемой не при загрузке массива, а в процессе загрузки по списку. Кажется, он всегда возвращает последнюю запись, загруженную независимо. Я попытался ограничить то, что было сохранено в ArrayList (itemVal = 2), чтобы увидеть, было ли это единственное возвращаемое значение. Но это не так. Код ниже:ArrayList не возвращает массив, но последний элемент

import java.util.ArrayList; 

public class testNewClass{ 
// element layout: 
// String defTitle 
// int seriesVal 
// int itemVal 
// double x coordinate 
// double y coordinate 

static String defTitle; 
static int seriesVal; 
static int itemVal; 
static double xCoordinate; 
static double yCoordinate; 

/* 
* Private constructor 
*/ 
private static ArrayList<testNewClass> testList = new ArrayList<testNewClass>(); 

/* 
* Methods 
*/ 
public static void setAll(String title, int series, int item, double x, double y){ 
    testNewClass newTest = new testNewClass(); 
    newTest.defTitle = title; 
    newTest.seriesVal = series; 
    newTest.itemVal = item; 
    newTest.xCoordinate = x; 
    newTest.yCoordinate = y;  
    if (item == 2){ 
     testList.add(newTest); 
     System.out.println("count of testList="+testList.size()); 
     System.out.println("LOADING..series="+series+" item="+item+" x="+x+" y="+y);    
    } 
} 

public void setTitle(String title){ 
    this.defTitle = title; 
} 

public static String returnNext(int Series, int Item){ 
    String rtnVal = null; 
    System.out.println("testList(size)="+testList.size()+"..Series="+Series+"..Item="+Item); 
    for (int i=0; i<testList.size(); i++){ 
     int nSeries = testList.get(i).seriesVal; 
     int nItem = testList.get(i).itemVal; 
     System.out.println("X="+testList.get(i).xCoordinate); 
     System.out.println("(i)="+i+" nSeries="+nSeries+" nItem="+nItem); 
     if (nSeries == Series && nItem == Item){ 
      double lX = testList.get(i).xCoordinate; 
      double lY = testList.get(i).yCoordinate; 
      rtnVal = "x=" + lX + " y="+lY; 
      break; 
     } 
    } 
    return rtnVal; 
} 

}

+0

Этот код трудно читать и не имеет смысла. Почему вы храните список экземпляров класса, в котором нет ничего, кроме статических членов? Вы понимаете, что «статический» означает «истинно для класса»? Каждый экземпляр будет иметь одинаковые значения. – duffymo

+0

Он вызывается из другого класса для хранения координат x и y вместе с некоторыми другими данными в массиве (списке). –

+0

Спасибо. Проблема решена. Проблема была связана со статической ссылкой на значения элементов класса. –

ответ

0

Я думаю, что этот код ближе к марке. Обратите внимание, что последняя точка действительно та, которую она возвращает, и все точки в ряду независимы.

package cruft; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 

/** 
* Series encapsulates a List a Points 
* Created by Michael 
* Creation date 12/20/2015. 
* @link https://stackoverflow.com/questions/34387750/arraylist-is-not-returning-the-array-but-the-last-element 
*/ 
public class Series { 

    private List<Point> points; 

    public static void main(String[] args) { 
     Series series = new Series(); 
     double x = 0.0; 
     double y = 0.0; 
     double dx = 0.1; 
     int numPoints = 21; 
     double minY = -1.0; 
     double maxY = +1.0; 
     Random random = (args.length > 0) ? new Random(Long.valueOf(args[0])) : new Random(); 
     for (int i = 0; i < numPoints; ++i) { 
      series.addPoint(new Point(x, y)); 
      x += dx; 
      y = minY + (maxY-minY)*random.nextDouble(); 
     } 
     System.out.println(series); 
     System.out.println(series.getLastPoint()); 
    } 

    public Series() { 
     this(null); 
    } 

    public Series(List<Point> points) { 
     this.points = (points == null) ? new ArrayList<Point>() : new ArrayList<Point>(points); 
    } 

    public void addPoint(Point p) { 
     if (p != null) { 
      this.points.add(p); 
     } 
    } 

    public Point getPoint(int index) { 
     return this.points.get(index); 
    } 

    public Point getLastPoint() { 
     return this.getPoint(this.points.size()-1); 
    } 

    @Override 
    public String toString() { 
     return "Series{" + 
       "points=" + points + 
       '}'; 
    } 
} 

class Point { 
    public final double x; 
    public final double y; 

    public Point(double x, double y) { 
     this.x = x; 
     this.y = y; 
    } 

    public double getX() { 
     return x; 
    } 

    public double getY() { 
     return y; 
    } 

    @Override 
    public String toString() { 
     return "Point{" + 
       "x=" + String.format("%10.5f", x) + 
       ", y=" + String.format("%10.5f", y) + 
       '}'; 
    } 
} 
Смежные вопросы