5. Нажмите кнопку Run, чтобы сохранить установленную конфигурацию и запустить приложение.

Рисунок 13

Создав однажды конфигурацию запуска своего приложения, вы можете запускать его вновь с помощью меню Run->Run History или кнопки Run на панели инструментов. Если вы потратите достаточно времени, "играя" с этим калькулятором, вы обнаружите, что он работает в основном правильно, но только с одном "но": он не хочет правильно выполнять операцию вычитания! Время пустить в ход отладчик исходного кода Eclipse и обнаружить эту злосчастную ошибку. Если вы следовали всем инструкциям, приведенным выше в этой статье, то вы можете запустить это приложение с отладчиком с той же конфигурацией, которую мы определили для обычного запуска. Для этого выберите в меню пункт Run->Debug History->Calculator.

Когда вы запускаете свое приложение вместе с отладчиком, Eclipse автоматически переключается в ракурс Debug:

Рисунок 14


Поскольку, обнаруженная нами, проблема сконцентрирована вокруг функции вычитания, мы установим точку прерывания (breakpoint) в обработчик события для кнопок "-" и "=". Для начала, нам нужно переключиться в закладку редактора класса CalcPanel. (Если у вас нет закладки с исходным кодом этого класса, вам нужно открыть файл с именем CalcPanel.java, предварительно переключившись в ракурс Java или Resource и потом вернуться обратно в ракурс Debug).

Воспользуйтесь панелью Outline, чтобы определить местонахождение метода actionPerformed. Переместитесь немного ниже, пока не обнаружите выражение case для знака "-" (строка 126). Если вы выполните двойной клик на левой границе этой строки, Eclipse автоматически установит точку прерывания в ней. Переместитесь немного ниже и установите еще одну точку прерывания на вызове метода model.calculate() в обработчике события кнопки "=" (строка 138).

Рисунок 15

Теперь переключитесь в окно калькулятора и нажмите несколько кнопок. Например, "2", "4", "6" и "-". Как только отладчик натыкается на точку прерывания, вы можете видеть появившиеся кнопки на панели инструментов Debug, которые служат для пошагового прохождения по исходному коду, причем можно делать шаги по коду и, не заходя внутрь методов, выполнять их автоматически, или же, заходя внутрь, проходиться и по их исходному коду.

Рисунок 16

Если мы зайдем внутрь метода setOperation(), станет понятно, что он выполняют достаточно тривиальную функцию: сохраняет код операции в поле pendingOp. Теперь нажмите кнопку Resume на панели инструментов Debug, чтобы продолжить выполнение программы.

Замечание: Основная ошибка новых пользователей Eclipse в том, что они иногда нажимают кнопки Debug или Run на основной панели инструментов (что приводит к запуску еще одной копии приложения) вместо того, чтобы нажать Resume.

Теперь нажмите еще пару кнопок (например, "1", "2", "3") и после этого кнопку "=". Таким образом, мы оказываемся внутри метода calculate(), проблема оказалась очевидна: кто-то скопировал код из варианта OP_ADD, но забыл заменить знак + на -. Проблема решена! :)

Исправление ошибки методом HotSwap

Если для запуска приложения вы использовали JVM версии 1.4, то нам остался всего один завершающий шаг на пути к исправлению этой ошибки в нашем примере. Вместо того, чтобы выходить из программы-калькулятора, вносить изменения в исходный код, компилировать заново весь проект, и только потом запускать новую сессию отладчика, мы можем изменить все "налету". В то время как отладчик все еще запущен, измените в исходном коде строку с:

setDisplay(previousValue + currentValue);

// на:setDisplay(previousValue - currentValue);

Сохраните этот файл, после чего нажмите кнопку Resume, чтобы "отпустить" приложение и продолжить работу с ним. Используя кнопку C, чтобы сбросить его, и повторите действия, которые мы проделали ранее. Теперь все работает, как положено!

То, что мы сейчас продемонстрировали – это поддержка Eclipse'ом новой возможности (которая носит название HotSwap) JVM версии 1.4. Теперь Java Platform Debugger Architecture (JPDA) поддерживает возможность замены исходного кода у выполняющегося приложения. Это особенно полезно, когда запуск приложения или нахождение места, где оно "рушится", отнимает много времени.

Установка параметров командной строки в IDE Eclipse.

Чтобы установить параметры командной строки, надо выбрать меню Run->Run…, затем ввести данные так, как показано на рисунке.

Ресурсы

·           eclipse.org (http://www.eclipse.org/)

·           Eclipse Project FAQ (http://www.eclipse.org/eclipse/faq/eclipse-faq.html)

·           Eclipse Platform Technical Overview (http://www.eclipse.org/whitepapers/eclipse-overview.pdf)


Приложение 4. Листинг программы, подсчитывающей , как долго нужно откладывать деньги, чтобы к выходу на пенсию накопить заданную сумму, при условии, что ежегодно откладывается одна и та же сумма и размер счета возрастает в соответствии с процентной ставкойJava

import javax.swing.*;

public class Retirement {

public static void main(String[] args) {

// чтение входных данных

String input = JOptionPane.showInputDialog

("Сколько денег вам нужно для пенсии?");

double goal = Double.parseDouble(input);

input = JOptionPane.showInputDialog

("Каков объем вашего ежегодного взноса?");

double payment = Double.parseDouble(input);

input = JOptionPane.showInputDialog

("Процентная ставка, %:?");

double interestRate = Double.parseDouble(input);

// Обновлять баланс счета, пока не накопится нужная сумма

double balance = 0;

int years = 0;

while (balance < goal)

{

// Добавить ежегодный взнос и процент

balance += payment;

double interest = balance*interestRate/100;

balance += interest;

years++;

}

System.out.println

("Можете идти на пенсию через "+ years + "лет");

System.exit(0);

}

}


Приложение 5. Листинг программы, иллюстрирующей работу с одномерными массивами (создание и сортировка массива)

import java.util.*;

import javax.swing.*;

public class Lottery {

 public static void main(String[] args){

String input = JOptionPane.showInputDialog

("Сколько номеров нужно угадать?");

int k = Integer.parseInt(input);

input = JOptionPane.showInputDialog

("Чему равен наибольший из возможных номеров?");

int n = Integer.parseInt(input);

// Заполняем массив числами 1..n

int[] numbers = new int[n];

for (int i = 0; i< numbers.length; i++)

numbers[i] = i+1;

// Генерируем k чисел и помещаем их во второй массив

int[] result = new int[k];

for (int i = 0; i< result.length; i++)

{

// Генерируем случайный индекс от 0 до n -1

int r = (int)(Math.random()*n);

// Помещаем элемент в случайную ячейку

result[i] = numbers[r];

// Перемещаем последний элемент в случайную ячейку

numbers[r] = numbers[n-1];

n--;

}

// Выводим на печать упорядоченный массив

Arrays.sort(result);

System.out.println

("Поставте на следующую комбинацию - не пожалеете!");

for (int i = 0; i< result.length; i++)

System.out.println(result[i]);

System.exit(0);

}

}


Приложение 6. Спецификация класса Figure   Обязательная часть.

import java.io.*;//подключение пакета с классами ввода/вывода

public class Figure {

public static void main(String[] args) {

int n;//Например, длина стороны.

char outline='*', fill=' '; //Символы, реализующие контур и заливку.

//…

try{

 switch (args.length){ //Размер массива args[] – число слов-аргументов командной строки

case 1: {n=Integer.parseInt(args[0]);break;} //Преобразвание 1-го слова в int

case 2: {n=Integer.parseInt(args[0]); outline=args[1].charAt(0);break;}

//outline-это первый символ 2-го слова командной строки

//…

case 0: {

System.out.println("Введите длину стороны квадрата (размер стрелки и т.д.)");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

//Чтение строки из входного потока:

n=Integer.parseInt(br.readLine()); //и преобразование в int

break;

}

} //окончание try{}

catch(Exception ex){

System.out.println(ex.getMessage());

System.exit(0); //выход из программы

}

for (int i=1;i<=n;i++){

//…

for (int j=1;j<=n;j++){

//…

}

System.out.println();

 }

} //Конец public static void main(…)

} //Конец программы (класса Figure())

Необязательная часть (Вывод в файл).

try{

File f = new File("d:\\Figure.txt"); //Создаем объект “Файл”. Физически это файл d:\Figure.txt

if (!f.exists()) {f.createNewFile();} //Если файл не существует, создаем его.

FileWriter fr = new FileWriter(f); //fr-объект класса FileWriter, у которого есть набор методов //для записи в файл. Например,

// fr.write(outline) эквивалентно System.out.print(outline)

for (int i=1;i<=n;i++){

//…

for (int j=1;j<=n;j++){

//…

}

fr.write ("\r\n"); //Переход на новую строку

}

fr.close(); //Поток обязательно надо закрыть!

}

catch(Exception e){

System.out.println(e.getMessage());

System.exit(0); }


Информация о работе «Основные структуры языка Java»
Раздел: Информатика, программирование
Количество знаков с пробелами: 55352
Количество таблиц: 3
Количество изображений: 15

Похожие работы

Скачать
46208
7
1

... транслятор его проигнорирует. /* * Этот код несколько замысловат... * Попробую объяснить: */ Зарезервированные ключевые слова Зарезервированные ключевые слова — это специальные идентификаторы, которые в языке Java используются для того, чтобы идентифицировать встроенные типы, модификаторы и средства управления выполнением программы. На сегодняшний день в языке Java имеется 59 зарезервированных ...

Скачать
16227
4
2

... из вложенного цикла. C# поддерживает отдельное понятие именованной типизированной константы и ключевое слово const. В Java констант как таковых нет, вместо них используются статические переменные класса с модификатором final – эффект от их использования точно такой же. Разработка транслятора   Разработка лексического анализатора Алфавит языка Большие и малые буквы английского алфавита: ...

Скачать
13852
0
0

... альтернативы AWT разработана библиотека Swing. Она целиком основана на возможностях языка, имеет множество функций и платформонезависима, но скорость ее работы невысока. На Java сложно программировать Миф о сложности программирования на Java основан большей частью на том, что стандартная библиотека классов имеет многоуровневую древовидную структуру и включает огромное число разнообразных ...

Скачать
19171
0
0

... самое время такой подход существенно затрудняет трансляцию Си-программ, известных своим нецензурным кастингом (от английского «to cast» — явное преобразование типов) и вольным обращением с указателями. Говоря о безопасности Java, главным образом сосредоточимся нa JVM, поскольку системы контроля, встроенные непосредственно в язык программирования Java, работают лишь на стадии трансляции, страхуя ...

0 комментариев


Наверх