Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 16.09.2011
Сообщений: 24
1

Перевод программы на Java

27.05.2012, 16:41. Показов 1496. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Преподаватель поставил задачу написать программу на 3-х языках: C#, C++/CLI, Java. Написал программу на C#, также другой ветке форума помогли перевести её на C++/CLI. Может найдётся добрый человек, который поможет перевести её на Java?=) Просто с языком не знаком, и слышал, что от C# он не сильно отличается, только в нём нет делегирования и потоки как-то специфично реализуются.
Сам бы с удовольствие со всем разобрался, но время сильно ограничено (просто не успею разобраться), преподаватели наверно думают, что в сутках 48 часов=)
Ниже привожу примеры на C# и на C++/CLI
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;
delegate void DEL(int k); 
class Ball
{
    public int x, y;   // координаты
    Thread t;   // поток
    bool life; // индикатор жизни шарика
    Window win;//объявление поля win
    public Ball(Window win)
    {
        x = 0;
        y = 100;
        this.win = win;//присвоение полю win параметра win
        life = true;  
        t = new Thread(new ThreadStart(Moving));
        t.Start();
    }
    public event DEL ev;//объявление объекта типа делегат
    void Moving()
    {
        int dx = 3;//шаг перемещения шарика
        while (life)
        {
            Console.WriteLine("Начало движения");
            
            if (x <= win.Width - 10) 
                x += dx;
            else
            {
                if (ev != null) ev(win.k);
                life = false;
                Console.WriteLine("Конец");
                win.Invalidate();
            }
            win.Invalidate();
            Thread.Sleep(25);
        }
 
    }
    public void Handler(int k)
    {
        k++;//увеличения переменной количества окон
        if (k < 3)
        {
            Window win = new Window(k);//если окно одно, то создаём ещё одно
            win.Text = "Window 2";
            win.StartPosition = new FormStartPosition();
            win.Location = new Point(250 * k, 100);
            win.ShowDialog();//чтобы предотвратить схлопывание потока, текущий поток ожидает возврата DialogResult
        }
    }
}
class Window : Form
{
    Ball ball;//создание объекта ball класса Ball
    public int k;//номер окна(от 1 до 2)
    public Window(int k)
    {
        this.k = k;//присвоение текущего значения k переменной k 
        ball = new Ball(this);//шарик принимает параметр окно
        this.Text = "Window"; //название окна
        ball.ev+= new DEL(ball.Handler);//создание объекта делегата и загрузка в него обработчика
        
    }
    protected override void OnPaint(PaintEventArgs e) // модификатор расширения или изменения абстрактной или виртуальной реализации унаследованного метода, свойства, индексатора или события.
    {
        base.OnPaint(e); 
           e.Graphics.DrawEllipse(new Pen(Color.Black, 5), ball.x, ball.y, 50, 50);
           Console.WriteLine("repaint");
    }
 
    static void Main(string[] args)
    {
        int k = 1;//инициализация количества окон
        Window w = new Window(k);//создание обекта класса Window
        w.StartPosition = new FormStartPosition();
        w.Location = new Point(200*k,100);
        w.Show();
        Application.Run();                   // запуск этого окна
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "stdafx.h"
#using <mscorlib.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
#using <System.dll>
 
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::Threading;
 
delegate void DEL(int k);
 
ref class Window;
 
ref class Ball
    {
    public:
        int x, y;
        Thread ^ t;
        bool life;
        Window ^ win;
 
        Ball(Window ^ win);
 
        event DEL ^ ev;
    private:
        void Moving();
    public:
        void Handler(int k);
    };
ref class Window : Form
    {
    Ball ^ ball;
    public:
        int k;
 
        Window(int k)
            {
            this->k = k;
            ball = gcnew Ball(this);
            this->Text = "Window";
            ball->ev += gcnew DEL(ball, &Ball::Handler);
            }
    protected:
        virtual void OnPaint(PaintEventArgs ^ e) override
            {
            Form::OnPaint(e);
            e->Graphics->DrawEllipse(gcnew Pen(Color::Green, 5), ball->x, ball->y, 50, 50);
            Console::WriteLine("repaint");
            }
    };
 
Ball::Ball(Window ^ win)
    {
    x = 0;
    y = 100;
    life = true;
    this->win = win;
    t = gcnew Thread(gcnew ThreadStart(this, &Ball::Moving));
    t->Start();
    }
 
void Ball::Moving()
    {
    int dx = 3;
    while(life)
        {
        Console::WriteLine("Начало движения");
 
        if(x <= win->Width - 10)
            x += dx;
        else
            {
            ev(win->k);
            life = false;
            Console::WriteLine("Конец");
            win->Invalidate();
            }
        win->Invalidate();
        Thread::Sleep(25);
        }
    }
 
void Ball::Handler(int k)
    {
    ++k;
    if(k < 3)
        {
        Window ^ win = gcnew Window(k);
        win->Text = "Window 2";
        win->StartPosition = FormStartPosition();
        win->Location = Point(250 * k, 100);
        win->ShowDialog();
        }
    }
 
int main(cli::array<String ^> ^ args)
    {
    int k = 1;
    Window ^ w = gcnew Window(k);
    w->StartPosition = FormStartPosition();
    w->Location = Point(200 * k, 100);
    w->Show();
    Application::Run();
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2012, 16:41
Ответы с готовыми решениями:

Перевод программы с C++ в Java
Мета: використання шифру підстановки (квадрат Полібія) для шифрування тексту. #define...

Перевод программы с Pascal на Java
Есть программа на Паскале. {$A-,B-,D-,E+,F-,G-,I+,L-,N-,O-,R-,S-,V-,X-} {$M 16384,0,655360} uses...

Перевод кода с Pascal на Java - Java SE
var a:Int64; begin Reset(Input,'input.txt'); Rewrite(Output,'output.txt'); read(a);...

Аналог MoveNext на Java. Перевод программы с C# на Java
Написала программу на C#. Перевожу ее на Java. Проблема возникла в переводе нижеследующего куска...

1
0 / 0 / 1
Регистрация: 16.09.2011
Сообщений: 24
29.05.2012, 01:44  [ТС] 2
Лучший ответ Сообщение было отмечено K16FORWARD как решение

Решение

Вот что написал сам:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package prmjava;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
 
class Ball extends Observable implements Runnable
{
    public int x, y;
    private Thread t;
    boolean life;
    private Win win1;
 
    public Ball(Win win1)
    {
        x = 0;
        y = 100;
        this.win1=win1;
        life = true;
        t = new Thread(this);
        t.start();
    }
 
    public void run()
    {
        int dx = 3;
        while (life)
        {
            x += dx;
            if (x<=win1.WIDTH-10) 
                x+=dx;
            
            try
            {
                Thread.sleep(50);
            }
            catch (InterruptedException e) { }
            win1.repaint();
        }
    }
    
}
 
public class Win extends Frame
{
    Ball b;
    public Win()
    {
        b = new Ball(this);
        setTitle("Window 1");
        setSize(300, 300);
        setVisible(true);
        setLayout(null);
 
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent wE)
            {
                System.exit(0);
            }
        });
    }
 
    public void paint(Graphics g)
    {
            g.setColor(Color.red);
            g.drawOval(b.x, b.y, 80, 80);
    }
 
    public static void main(String[] args)
    {
        Win win1 = new Win();
 
    }
    
};
Здесь просто создаётся окно и в нём шарик летит слева направо, но как я написал в предыдущем сообщении не знаю как реализуются события в Java, мне нужно просто сгенерировать сообщение и в обработчике прописать создание ещё одного объекта окно, а шарик там сам естественно построится и будет двигаться. Помогите плз с событием)

Добавлено через 1 час 39 минут
С событиями вроде разобрался, осталась одна ошибка, может ко-нибудь поможет её побороть?)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package prmjava;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
 
class Watcher implements Observer//класс обозревателя
{
    public void update(Observable obj)
    {
        Win win1 = new Win();
    }
}
class Ball extends Observable implements Runnable
{
    public int x, y;
    private Thread t;
    boolean life;
    private Win win1;
 
    public Ball(Win win1)
    {
        x = 0;
        y = 100;
        this.win1=win1;
        life = true;
        t = new Thread(this);
        t.start();
    }
 
    public void run()
    {
        int dx = 3;
        while (life)
        {
            x += dx;
            if (x <= win1.WIDTH - 10)
                x += dx;
            else
            {
                setChanged();
                notifyObservers();
            }
            try
            {
                Thread.sleep(50);
            }
            catch (InterruptedException e) { }
            win1.repaint();
        }
    }
    
}
 
public class Win extends Frame
{
    Ball b;
    //public int k;
    public Win()
    {
        b = new Ball(this);
        setTitle("Window 1");
        setSize(300, 300);
        setVisible(true);
        setLayout(null);
 
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent wE)
            {
                System.exit(0);
            }
        });
    }
 
    public void paint(Graphics g)
    {
            g.setColor(Color.red);
            g.drawOval(b.x, b.y, 80, 80);
    }
 
    public static void main(String[] args)
    {
        //int k = 1;
        Win win1 = new Win(k);//создание объекта окно
        Watcher w = new Watcher();//создание объекта обозревателя
        Ball bw = new Ball();//создание наблюдаемого объекта 
        bw.addObserver(w);
        bw.perform();
    }
 
    
};
Добавлено через 2 часа 37 минут
Всем спасибо за ОГРОМНЕЙШУЮ помощь. Разобрался сам, ниже привожу код, может кому-нибудь понадобится:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package prmjava;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
 
class Watcher implements Observer//класс обозревателя
{
    public int k = 1;
    public void update(Observable obj, Object arg)
    {
        if(k<3)
        {
            k++;
            Win win1 = new Win();
            win1.setTitle("Window 2");
            win1.setLocation(398,200);  
        }
    }
}
class Ball extends Observable implements Runnable
{
    public int x, y;
    private Thread t;
    boolean life;
    private Win win1;
 
    public Ball(Win win1)
    {
        x = 0;
        y = 130;
        this.win1=win1;
        life = true;
        t = new Thread(this);
        t.start();
    }
    public void perform()
    {
        setChanged();
        notifyObservers();
    }
 
    public void run()
    {
        int dx = 3;
        while (life)
        {
            x += dx;
            if (x < 250) x += dx;
            else perform();
            try
            {
                Thread.sleep(70);
            }
            catch (InterruptedException e) { }
            win1.repaint();
            
            
        }
    }
    
}
 
public class Win extends Frame
{
    public Ball b;
    public Win()
    {
        b = new Ball(this);
        setTitle("Window 1");
        setSize(300, 300);
        setLocation(100, 200);
        setVisible(true);
        setLayout(null);
 
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent wE)
            {
                System.exit(0);
            }
        });
    }
    public void paint(Graphics g)
    {
            g.setColor(Color.red);
            g.drawOval(b.x, b.y, 80, 80);
    }
 
    public static void main(String[] args)
    {
        Win win1 = new Win();//создание объекта окно
        Watcher w = new Watcher();//создание объекта обозревателя
        Ball bw =  new Ball(win1);//создание наблюдаемого объекта 
        bw.addObserver(w);
    }
 
    
};
0
29.05.2012, 01:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2012, 01:44
Помогаю со студенческими работами здесь

Перевод программы из С++ в Java
#include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; int c2 = {16, 18, 19, 25, 1,...

Перевод программы из C# в Java
Написана программа, которая отображает нагрузку процессора и объем занятой памяти удаленных сетевых...

Перевод программы с Java на C#
Нужна помощь с переводом программы с Java на C#. Сама задача для которой нужно было написать...

Перевод программы с Java на C
public interface EulerSolution{ public String run(); } import java.util.HashMap; import...

Перевод программы с Java на Си
Задание переписать ранее написанную Java програму на Cи В Си совсем ничего не понимаю. не знаю С...

Перевод код С++ на Java - Java SE
#include &lt;fstream&gt; using namespace std; ifstream cin (&quot;input.txt&quot;); ofstream cout...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru