Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java]Две программы


Автор: kornata 18.4.2010, 13:04
Как это сделать?

Напишите две программы. Первая должна суммировать два введённых из входного потока числа и выдавать сумму в выходной поток. Вторая должна запускать первую, подавать ей на вход пару констант, считывать результат, выданный первой программой, умножать его на 2 и выдавать в выходной поток. 

Автор: LSD 20.4.2010, 11:55
http://base.vingrad.ru/view/2778-Esche-raz-o-Runtimeexec

Автор: Dancer 20.4.2010, 12:50
first.java
Код

public class first {
    public static void main(String args[]) {
        if(args!=null && args.length == 2) {
            try {
                double value_1 = Double.parseDouble(args[0]);
                double value_2 = Double.parseDouble(args[1]);
                System.out.println(value_1 + value_2);
            } catch(Throwable t) {
            }
        }
    }
}



second.java
Код

import java.io.*;

public class second {
    private static final String NAME_OF_RUN_CLASS_FILE = "first";
    private static final String RUN_JAVA = "java";
    private static final String SPACE = " ";

    private static final double FIRST_VALUE = 1.0;
    private static final double SECOND_VALUE = 11.1;

    public static void main(String args[]) {
        StringBuilder runStr = new StringBuilder();
        runStr.append(RUN_JAVA).append(SPACE).append(NAME_OF_RUN_CLASS_FILE).
        append(SPACE).append(FIRST_VALUE).append(SPACE).append(SECOND_VALUE);

        try {
            Process proc = Runtime.getRuntime().exec(runStr.toString());
            InputStream is = proc.getInputStream();

            int ch = 0;
            StringBuilder buf = new StringBuilder();
            while((ch = is.read()) != -1) {
                buf.append((char)ch);
            }
            System.out.println("Result: " + (Double.parseDouble(buf.toString())*2));
        } catch(Throwable t) {
            System.out.println("Something wrong: " + t);
            t.printStackTrace();
        }
    }
}


Автор: kornata 22.4.2010, 22:59
Спасибо! Первая программа работает, вторая ничего не делает (выдаёт пустую строку).

Автор: kornata 23.4.2010, 19:00
Не пойму как и что запускать. Запускать первую с двумя числами, а потом вторую (с какими аргументами?) или запускать сразу вторую с двумя аргументами или как?

Автор: Dancer 24.4.2010, 16:48

1. В одну директорию копируем файлы first.java и second.java
2. Из командной строки делаем компиляцию наших классов: javac *.java
3. Из командной строки запускаем вторую прогу: java second
Так как в задании сказано, что константы передаются из проги 2, то эти два значения как константы и представлены. Если нужны другие значения, то их нужно изменить, перекомпилить second.java и сделать запуск снова: java second
Если же нужно брать значения из командной строки, то чутка переделать second.java (смотрим на то, как читаются входные значения в first.java)
Можно вообще сделать один JAR файл, в котором будут помещены наши class файлы и запускаться как java -jar XXX.jar (в MANIFEST.MF прописав файл, который должен стартоваться)

Автор: kornata 25.4.2010, 18:16
Вторая программа не даёт никаких результатов!  smile 

Автор: Dancer 26.4.2010, 11:38
запускать так: java -jar proga.jar
в архив входит и первая и вторая программы. (так же для наглядности там и исходный код)
всё работает. выводится Result: 24.2 (точно так же , как если без архива)

Автор: kornata 6.5.2010, 16:39
Большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)