С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
spbsmile
2 / 2 / 0
Регистрация: 02.07.2011
Сообщений: 46
1

Переписать код с Java на C#

23.03.2012, 20:17. Просмотров 1663. Ответов 6
Метки нет (Все метки)

уважаемые программисты С#. перепишете пожалуйста эту программу на C#.
очень надо.
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
package thread;
 
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
 
 
public class InnerClassTest {
    public static void main(String[] args){
 
     TalkingClock clock = new TalkingClock(3000, true, "Alex" );
     TalkingClock clock2 = new TalkingClock(5000, true, "Petr" );
     clock.start();
    // clock.join();
     clock2.start();
     
     
     JOptionPane.showMessageDialog(null, "Quit progamm?");
     System.exit(0);
    }    
}
 
class TalkingClock {
    public TalkingClock( int interval, boolean beep, String name) {
         this.interval = interval;
         this.beep = beep;
         this.name = name;
    }
    
    public synchronized void  start() {
        ActionListener listener = new TimerPrinter();
        Timer t = new Timer(interval, listener);
         t.start();
    }
    
    private int interval;
    private boolean beep;   
    private String name;
    
    private class TimerPrinter implements ActionListener {
        public void actionPerformed(ActionEvent event){
            //String name = "Petr";
            byte buff[] = name.getBytes();
            try
            {
                File file = new File("Currenr.txt");
                if (!file.exists())
                {
                    file.createNewFile();
                }
                
                FileOutputStream out = new FileOutputStream("Currenr.txt", true);
                for ( int i=0; i<buff.length; i++)
                {
                    out.write(buff[i]);
                }
                
            //  out.close();
            }
            
            catch(FileNotFoundException e)
            {}
            
            catch(IOException e)
            {}
            /*
            Date now = new Date(); 
            System.out.println("At the tone, the time is " + now);
            */if (beep) Toolkit.getDefaultToolkit().beep(); 
            }
            
    }
}
Добавлено через 45 минут
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Timer;
 
namespace ConsoleApplication11
 
public class InnerClassTest {
    public static void main(String[] args){
 
     TalkingClock clock = new TalkingClock(3000, true, "Alex" );
     TalkingClock clock2 = new TalkingClock(5000, true, "Petr" );
     clock.start();
      //clock.join();
     clock2.start();
     
     
     JOptionPane.showMessageDialog(null, "Quit progamm?");
     System.exit(0);
    }    
}
 
class TalkingClock {
    public TalkingClock( int interval, Boolean beep, String name) {
         this.interval = interval;
         this.beep = beep;
         this.name = name;
    }
    
    public  void  start() {
        ActionListener listener = new TimerPrinter();
        Timer t = new Timer( listener, interval);
        t.start();
    }
    
    private int interval;
    private Boolean beep;   
    private String name;
    
    private class TimerPrinter : ActionListener {
        public void actionPerformed(ActionEvent event){
            //String name = "Petr";
            byte buff[] = name.getBytes();
            try
            {
                File file = new File("Currenr.txt");
                if (!file.exists())
                {
                    file.createNewFile();
                }
                
                FileOutputStream out = new FileOutputStream("Currenr.txt", true);
                for ( int i=0; i<buff.length; i++)
                {
                    out.write(buff[i]);
                }
                
            //  out.close();
            }
            
            catch(FileNotFoundException e)
            {}
            
            catch(IOException e)
            {}
            /*
            Date now = new Date(); 
            System.out.println("At the tone, the time is " + now);
            */if (beep) Toolkit.getDefaultToolkit().beep(); 
            }
            
    }
}
используется обратный вызов. как перезаписать на с# callback , как я написал на java??
какой аналог ActionListener в с#&
программа не понимает конструктор Timer, хотя я и включил using System.Threading.Timer;
с системой ввода вывода тоже разбираться надо((
хотя бы скажите - легко ли перезаписать мою java программу на с#? я с с# к сожалению не знаком еще
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 20:17
Ответы с готовыми решениями:

Переписать код Java на C#
Здравствуйте, кто может переписать этот код под C# package sample1; import...

Нужно переписать код простой задачки с языка Java на C# ( до конца не получается )
оригинал на Java (задачка о рюкзаке- жадный алгоритм) public class Main { ...

Переписать с Java в С #
namespace graff public class Graph { private static final short N = 8; ...

Переписать функцию с Java Script на C#
Здравствуйте, подскажите пожалуйста как в C# можно реализовать функцию на...

Переписать код с C++ на C#
помогите переписать программу с++ на с# у меня не получается=(#include...

6
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
23.03.2012, 20:41 2
Цитата Сообщение от spbsmile Посмотреть сообщение
какой аналог ActionListener в с#&
Кажется, делегаты.
Цитата Сообщение от spbsmile Посмотреть сообщение
программа не понимает конструктор Timer, хотя я и включил using System.Threading.Timer;
Тут пример есть, должен подойти вам (пример с делегатами и таймером): System.Threading.Timer
Цитата Сообщение от spbsmile Посмотреть сообщение
хотя бы скажите - легко ли перезаписать мою java программу на с#? я с с# к сожалению не знаком еще
Я не очень хорошо знаю Java, но, кажется, несложно.
Вместо6:
Java
1
JOptionPane.showMessageDialog();
это:
C#
1
MessageBox.Show();
Вместо:
Java
1
FileOutputStream
это:
C#
1
FileStream
Вместо:
Java
1
2
3
4
5
File file = new File("Currenr.txt");
if (!file.exists())
{
    file.createNewFile();
}
примерно следующее:
C#
1
2
3
4
5
if (File.Exists("Currenr.txt"))
{
    File.Delete("Currenr.txt");
}
FileStream fs = new FileStream("Currenr.txt");
Читайте MSDN: System.IO.FileStream
1
spbsmile
2 / 2 / 0
Регистрация: 02.07.2011
Сообщений: 46
24.03.2012, 02:50  [ТС] 3
надо создать два потока , которые записывают каждый свое имя с определенным интервалом времени в файл. на java написал , а с с# не получается(

делается запись в файл,которая передается через объект listener.
и эта запись запускается через объект t = new Timer, который запускается , через определенный интервал времени.

две проблемы :
1.сделать ввод не могу
2. проблема с конструтором Timer.
Timer t = new Timer( listener, interval);
не хочет принимать поле interval, которое разное у двух потоков.

вроде бы скопировал из документации код :
C#
1
2
3
4
5
6
FileStream fs=new FileStream("c:\\Variables.txt", FileMode.Append, FileAccess.Write, FileShare.Write);
        fs.Close();
        StreamWriter sw=new StreamWriter("c:\\Variables.txt", true, Encoding.ASCII);
        string NextLine="This is the appended line.";
        sw.Write(NextLine);
        sw.Close();
компилятор не принимает.

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Timer;
using System.IO.FileStream;
using System.Timers;
using System.IO;
 
namespace ConsoleApplication11{
 
public class InnerClassTest {
    public static void main(String[] args){
 
     TalkingClock clock = new TalkingClock(3000, true, "Alex" );
     TalkingClock clock2 = new TalkingClock(5000, true, "Petr" );
     clock.start();
      //clock.join();
     clock2.start();
     
     
     MessageBox.Show(null, "Quit progamm?");
     System.exit(0);
    }    
}
 
class TalkingClock {
    public TalkingClock( int interval, Boolean beep, String name) {
         this.interval = interval;
         this.beep = beep;
         this.name = name;
    }
    
    public  void  start() {
        TimerPrinter listener = new TimerPrinter();
        Timer t = new Timer( listener, interval);
        t.start();
    }
    
    private int interval;
    private Boolean beep;   
    private String name;
    
    private class TimerPrinter  {
        
        // This method is called by the timer delegate. 
 
        FileStream fs=new FileStream("c:\\Variables.txt", FileMode.Append, FileAccess.Write, FileShare.Write);
        fs.Close();
        StreamWriter sw=new StreamWriter("c:\\Variables.txt", true, Encoding.ASCII);
        string NextLine="This is the appended line.";
        sw.Write(name);
        sw.Close();
       
 
    }
  }
}
помогите перезаписать с java на с#

Добавлено через 3 минуты
51 строка закомментированна должна быть. а метод write должен видеть поле name! , которое иницилизируется в конструкторах потоков
0
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
24.03.2012, 08:49 4
1. Почему у Вас в class TimerPrinter нет методов, а просто сразу идёт код?
Цитата Сообщение от spbsmile Посмотреть сообщение
компилятор не принимает.
На подчёркиваемых им типах нажмите правой кнопкой, "Разрешить", "using ..."
Надо импортировать пространства имён.
Цитата Сообщение от spbsmile Посмотреть сообщение
метод write должен видеть поле name!
Это поле у Вас приватно. Вроде, Вы не можете получить к нему доступ, сделайте его публичным или создайте аналогичное свойство (Property, аналогов которых, вроде, нет в Java). И, кажется, в TimerPrinter вам придётся запоминать ссылку на TalkingClock через передачу this в конструктор TimerPrinter.
Цитата Сообщение от spbsmile Посмотреть сообщение
не хочет принимать поле interval, которое разное у двух потоков.
Посмотрите консрукторы, которые имеет System.Threading.Timer и сравните их с параметрами, которые Вы ему передаёте, лучше используйте следующий конструктор: Timer - конструктор (TimerCallback, Object, Int32, Int32)
Используйте что-то типа:
C#
1
2
Timer t = new Timer(listener, null, 0, interval);
t.start();
Хотя... Стоп, вы в Timer должны передавать метод, а не класс, вроде... Почитайте ещё раз про делегаты и таймеры.
0
spbsmile
2 / 2 / 0
Регистрация: 02.07.2011
Сообщений: 46
24.03.2012, 15:46  [ТС] 5
кто-нибудь может мне объяснить как строиться callback в с#?
в java поведение передаются через объект. этот объект есть в аргументе конструтора Timer.
в с# такое возможно?
0
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,169
Записей в блоге: 1
24.03.2012, 18:55 6
Я правильно понял, надо это?
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
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    public class TalkingClock : IDisposable
    {
        System.Timers.Timer _timer;
        StreamWriter _streamWriter;
        string _text;
 
        public TalkingClock(string fileName, string text, int interval)
        {
            _text = text;
 
            FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None);
            _streamWriter = new StreamWriter(fs);
 
            _timer = new System.Timers.Timer(interval);
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
        }
 
        public void Start()
        {
            _timer.Start();
        }
 
        public void Stop()
        {
            _timer.Stop();
        }
 
        void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _streamWriter.WriteLine(_text);
        }
 
        public void Dispose()
        {
            _timer.Stop();
            _timer.Dispose();
            _streamWriter.Flush();
            _streamWriter.Close();
            _streamWriter.Dispose();
        }
    }
}
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
using System;
using System.Collections.Generic;
using System.IO;
 
namespace ConsoleApplication1
{
    public class InnerClassTest : IDisposable
    {
        List<TalkingClock> _clocks;
        bool _started;
 
        public InnerClassTest()
        {
            string fileNameAlex = Path.Combine(Environment.GetFolderPath(
                Environment.SpecialFolder.DesktopDirectory), "Alex.txt");
            string fileNamePetr = Path.Combine(Environment.GetFolderPath(
                Environment.SpecialFolder.DesktopDirectory), "Petr.txt");
 
            _clocks = new List<TalkingClock>();
            _clocks.Add(new TalkingClock(fileNameAlex, "Алекс", 3000));
            _clocks.Add(new TalkingClock(fileNamePetr, "Пётр", 3000));
        }
 
        /// <summary>Показывает запущены ли таймеры</summary>
        public bool Started { get { return _started; } }
 
        public void Start()
        {
            foreach (TalkingClock clock in _clocks)
            {
                clock.Start();
            }
            _started = true;
        }
 
        public void Stop()
        {
            foreach (TalkingClock clock in _clocks)
            {
                clock.Stop();
            }
            _started = false;
        }
 
        public void Dispose()
        {
            foreach (TalkingClock clock in _clocks)
            {
                clock.Dispose();
            }
        }
    }
}
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
using System;
 
namespace ConsoleApplication1
{            
    class Program
    {
        static void Main(string[] args)
        {
            //после выхода из области видимости using, будет автоматически вызван test.Dispose();
            using (InnerClassTest test = new InnerClassTest()) 
            {
                test.Start();
                Console.WriteLine("Таймеры запущены");
                
                string command = string.Empty;
                bool exit = false;
                do
                {
                    command = Console.ReadLine().ToLower();
                    switch (command)
                    {
                        case "stop":
                            if (test.Started)
                            {
                                test.Stop();
                                Console.WriteLine("{0} Таймеры были остановлены", DateTime.Now.ToShortTimeString());
                            }
                            else
                                Console.WriteLine("{0} Таймеры были остановлены ранее", DateTime.Now.ToShortTimeString());
                            break;
 
                        case "start":
                            if (!test.Started)
                            {
                                test.Start();
                                Console.WriteLine("{0} Таймеры были запущены", DateTime.Now.ToShortTimeString());
                            }
                            else
                                Console.WriteLine("{0} Таймеры были запущены ранее", DateTime.Now.ToShortTimeString());
                            break;
 
                        case "close":
                            test.Stop();
                            exit = true;
                            break;
                    }
                    if (exit) //завершаем бесконечный цикл
                        break;
                    
                } while (true);
            }
        }
    }
}
1
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,169
Записей в блоге: 1
24.03.2012, 19:04 7
А в C# нужно подписываться на событие, вот там и происходит то самое поведение:
C#
1
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
Хотя никто не мешает писать как в Java, просто передавая делегат в качестве параметра конструктора или метода. Конкретно с готовым таймером так не сделаешь, и оно и не нужно, в C# есть события, на которые можно подписываться (указывать какой метод будет выполняться при инициации события из класса (например из таймера).

Вот проект, в котором можно посмотреть, как пишутся события, как на них подписываться, там вроде всё должно быть понятно.
1
Вложения
Тип файла: zip ConsApp_Events.zip (37.8 Кб, 8 просмотров)
24.03.2012, 19:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 19:04

Переписать код с C на C#
void loop() { int input int y, k = 0; for (int i = 0; i &lt; 5;...

Переписать на код C#
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; #include &lt;fstream&gt;...

Переписать код с С++ на С#
Здравствуйте, форумчане. Прошу помощи с переписыванием кода с другого языка. ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru