2015-09-17 2 views
0

Я создаю кривую потребителя и производителя, каждый из которых является собственным классом. У потребителя есть массив точек, а у производителя есть список массивов точек. Мне нужно создать метод, который создает «график» (consumerCurve и производительCurve). В этих методах необходимо проверить недопустимый параметр (т. Е. Отрицательные числа), создать экземпляр массива/списка массивов, а затем создать экземпляры/сохранить их в правильных слотах. Вот что у меня есть для consumerCurve:Как построить кривую массива и массива?

public class ConsumerCurve { 

private Point[] myConsumerCurve; 

public void Curve() 
{ 
    myConsumerCurve = new Point[10]; 

    for(int x=0; x<10; x++) 
    { 
     myConsumerCurve[x] = new Point(x,x); 
    } 
} 

public ConsumerCurve(int np, double m, double b, int dx) 
{ 
    //*1)check for invalid parameters 
    Point[] myConsumerCurve = new Point [np]; 

    if (np < 0) { 
      throw new IllegalArgumentException("'np' must not be negative"); 
     } 

    //2) Instantiate array using size n 
    for(int i=0; i<np; i++) 
    { 
     int x = i*dx; 
     double y = m*x+b; 
     myConsumerCurve[i] = new Point (x,y); 
    } 

    //3*)instantiate points store in correct slots 

} 

У меня есть вторая часть, но я не знаю, как проверить на invaid PARAMATERS и получать очки в правом слоте. Кроме того, будет ли он одинаковым для списка массивов? Возможно, потому, что я слишком долго смотрел на этот код и просто пропустил его.

+0

Вы уже проверяете 'np <0', просто проверяете другие аргументы одинаково. Что произойдет, если аргумент недействителен? 'np = (Integer) null;' не будет работать - вы не можете определить 'null' для примитивного типа' int'. В этом случае вы должны, вероятно, выбросить 'IllegalArgumentException'. Что вы понимаете, сохраняя точки в правильных слотах? Вы уже создали массив 'myCurve' и все его элементы, возможно, вы хотите иметь его как поле экземпляра вместо локальной переменной? – Cinnam

+0

В настоящее время в слотах ничего нет, потому что в другом классе точки создаются, а затем сохраняются в слотах для создания кривой. По сути, мне нужно сказать, что точки хранятся в порядке (так (0,0) (1,1) и т. Д.) В слотах – retrogirl19

+0

Что конкретно обозначают слоты и где они объявлены? Вы уже создали точки в этом методе, и в настоящее время они упорядочены по 'x'. Вы просто хотите сохранить их в другом месте? – Cinnam

ответ

0

Несколько замечаний по коду:

Point[] myCurve = new Point [np]; // if np is negative here, you will get an exception 
if(np< 0) { 
    np= -1; 
} 

Здесь вы должны проверить npперед вы используете его в new Point[np], иначе вы получите исключение в случае отрицательного np. Установка np на -1 не решила проблему. Вы должны либо установить его в 0, или, предпочтительно, сгенерирует исключение, указывающее, что аргумент не является приемлемым:

if (np < 0) { 
    throw new IllegalArgumentException("'np' must not be negative"); 
} 

Аналогично для других аргументов, если это необходимо.

Если Point является java.awt.Point, то его конструктор Point(int, int) - вам придется забрасывать double Ань int: new Point(x, (int) y). Если Point - это ваш собственный класс, который принимает в конструкторе double, то все в порядке.

И, наконец, вместо хранения точек локальной переменной myCurve, почему вы не храните их непосредственно в myConsumerCurve, как вы это делаете в методе curve()?

myConsumerCurve = new Point [np]; 

for(int i=0; i<np; i++) { 
    int x = i*dx; 
    double y = m*x+b; 
    myConsumerCurve[i] = new Point (x, y); // or 'new Point (x, (int) y)' if it's java.awt.Point 
} 

На стороне записки, это соглашение, что методы начинаются с нижним регистром (т.е. curve(), не Curve()).

+0

Я только что отредактировал мой код, я не могу иметь конструктор как пустоту, так что это изменит ситуацию, но не уверен, что это должно быть. Кроме того, мне нужно создать цикл for, который ищет через массив, чтобы увидеть, что такое точки, а затем, если кто-то отрицательный, говорит, что вы не можете иметь отрицательный – retrogirl19

+0

Конструкторы не имеют типа возврата, и они должны иметь то же имя, что и класс ,Если вы хотите, чтобы 'customerCurve()' был конструктором, вы объявляете его как 'public ConsumerCurve (...)'. – Cinnam

+0

Я просто понял, что после того, как я это сказал. Как создать цикл for, который проходит через массив, и ищет отрицательное число, и если он найдет его, тогда будет сказано, что вы не можете отрицать – retrogirl19

Смежные вопросы