Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать динамический массив, Как передать массив в другой метод 
V
    Опции темы
BIV
Дата 24.3.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.12.2007

Репутация: нет
Всего: 1



 Всем доброе время суток!
У меня возникли сложности с динамическим массивом. Значит я присвоил 2 нулевых массива int x1[]; int y1[];, в методе Line динамически увеличиваю массив и присваиваю ему значение. Проблемо возникает в следующем, я в методе print(); получаю нулевые значения. Что я делаю не так?

Код

import java.awt.*;
public class Rotation_P extends Frame
{       
    int x,y,kx,ky;       //Для линии
    int x1[]; 
    int y1[];     
    int r=0;            //Для окружности
    double f1=0,f2=0;   //Для окружности
    int o=0;
    public void print()
    {
        for(int i=0;i<o;i++){
        Graphics g=getGraphics(); 
        g.setColor(new Color(255, 0, 0));
        g.drawLine(x1[i]+300,y1[i]+250,x1[i]+300,y1[i]+250);};                       
    }

                

    public void paint(Graphics g)
    {
        x=0; y=0; kx=0; ky=200;
        Line();
        print();
    }

    public void Line()
      {
    o++;
    x1=new int[o];
    y1=new int[o];
    int dx = (kx - x >= 0 ? 1 : -1);
      int dy = (ky - y >= 0 ? 1 : -1);
 
      int lengthX = Math.abs(kx - x);
      int lengthY = Math.abs(ky - y);
 
      int length = Math.max(lengthX, lengthY);
 
      if (length == 0)
      {
            x1[o-1]=x;
            y1[o-1]=y;
      }
...

PM MAIL   Вверх
jk1
Дата 24.3.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Вы получаете именно то, что написали. 
После инициализации в массиве лежат нули. К моменту выполнения этого кода
Код

      if (length == 0)
      {
            x1[o-1]=x;
            y1[o-1]=y;
      }

у вас x=y=0. Таким образом, выполняется условие ветвления или нет, в массиве всегда остаются нули.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
BIV
Дата 24.3.2010, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.12.2007

Репутация: нет
Всего: 1



Мой код не понят, ладно, чуть переделал код, но результат такой же

Чтоб было понятно о чем речь, выложу весь код
Код

import java.awt.*;
public class Rotation_P extends Frame
{       
    int[] x1;
    int[] y1;
    int x,y,kx,ky;       //Для линии    
    int r=0;            //Для окружности
    double f1=0,f2=0;   //Для окружности
    int o=0;
    public void print()
    {
        x1=new int[o];
        y1=new int[o];
        x1[o-1]=x;
        y1[o-1]=y;
        Graphics g=getGraphics();         
        g.setColor(new Color(255, 0, 0));
        for(int i=0;o>i;i++)
        g.drawLine(x1[i]+300,y1[i]+250,x1[i]+300,y1[i]+250);                     
                                                                
    }

                

    public void paint(Graphics g)
    {
//____________________________________________________________________________
        x=0; y=0; kx=0; ky=200;
        Line();
        x=0; y=200; kx=-50; ky=200;
        Line();
        x=-50; y=200; kx=-50; ky=-200;
        Line();
        x=-50; y=-200; kx=50; ky=-200;
        Line();
        x=0; y=0; kx=50; ky=0;
        Line();

        r=100; x=50; y=-100; f1=-1.57; f2=1.64;
        Circle();
        r=50; x=50; y=-100; f1=-1.57; f2=1.64;
        Circle();

        x=50; y=-150; kx=0; ky=-150;
        Line();
        x=50; y=-50; kx=0; ky=-50;
        Line();
        x=0; y=-150; kx=0; ky=-50;
        Line();

                for(int i=0;o>i;i++){
        g.drawString("x="+x1[i], 100, 30+i*10);
        g.drawLine(x1[i]+300,y1[i]+250,x1[i]+300,y1[i]+250);}
    }
//____________________________________________________________________________

    public void Circle()
    {       
        int x1=x;
        int y1=y;
        x=(int)(r*(Math.cos(f1)))+x1;
        y=(int)(r*(Math.sin(f1)))+y1;
        for(double i=f1;i<=f2;)
        {
        //    x=kx; y=ky;
            kx=(int)(r*(Math.cos(i)))+x1;
            ky=(int)(r*(Math.sin(i)))+y1;
        //    print();
            Line();
            i=i+0.1;
            x=kx; y=ky;
        };
    }
    public void Line()
      {
    o++;
    int dx = (kx - x >= 0 ? 1 : -1);
      int dy = (ky - y >= 0 ? 1 : -1);
 
      int lengthX = Math.abs(kx - x);
      int lengthY = Math.abs(ky - y);
 
      int length = Math.max(lengthX, lengthY);
 
      if (length == 0)
      {
            print();
      }
 
      if (lengthY <= lengthX)
      {
            // Начальные значения
            int d = -lengthX;
 
            // Основной цикл
            length++;
            for(;length>0;length--)
            {
                  print();
                  x += dx;
                  d += 2 * lengthY;
                  if (d > 0) {
                        d -= 2 * lengthX;
                        y += dy;
                  }
            }
      }
      else
      {
            // Начальные значения

            int d = - lengthY;
 
            // Основной цикл
            length++;
            for(;length>0;length--)
            {
                  print();
                  y += dy;
                  d += 2 * lengthX;
                  if (d > 0) {
                        d -= 2 * lengthY;
                        x += dx;
                  }
            }
      }

    } 


    public Rotation_P(String str)
    {
       super(str);
       setSize(600, 500);
       setVisible(true);     

    }
     public boolean handleEvent(Event e)
     {                       
      

         switch(e.id)
         {
              case Event.WINDOW_DESTROY:
                 dispose();
                 System.exit(0);
                 return true;
         }
         return super.handleEvent(e);
     }
    public static void main(String [] ar)
    {
        Rotation_P F=new Rotation_P("Print P");
                                     
    }
}


Где метод принт все работает как надо, но данные не передались в paint, что делать?

Это сообщение отредактировал(а) BIV - 24.3.2010, 22:09
PM MAIL   Вверх
jk1
Дата 24.3.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Под "данные не передались" следует понимать, что массив x1 состоит из нулей?
Причина этому - вот этот код
Код

        x1=new int[o];
        y1=new int[o];

Он инициализирует массивы заново, то есть выделяет под них новую память и все элементы в них становятся нулями. В языке Java массивы имеют постоянную длину и не могут быть увеличены.



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
BIV
Дата 24.3.2010, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.12.2007

Репутация: нет
Всего: 1



jk1, спасибо ОГРОМНОЕ!
Все понял, все получилось)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0933 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.