At javaapplication1.JavaApplication1.main(JavaApplication1.java:25)




Здесь 25 – номер программной строки с ошибкой.

Часто встречающиеся ошибки программирования:

1. Использование else безпервой ветви:

if (n > m)

Else...

2. Использование открывающей фигурной скобки { без закрывающей } и наоборот.

3. Отсутствие точки с запятой перед словом else:

if (n > m)

a=1

else a=0;

4. Точка с запятой после условия:

if (n > m);

a=1;

else a=0;

5. Отсутствие точки с запятой перед закрывающей фигурной скобкой } или наличие точки с запятой после нее:

if (c < 2.5)

{

a=Math.sin(c);

b=Math.abs(c);

};

Else

{

a=Math.cos(c);

b=1.0/c

}

Пример

Задан график функции f(x) – полуокружность радиуса R=1:

Определить:

1. Значение функции y при заданном значении аргумента x.

2. Площади фигур слева и справа от линии разреза.

По теореме Пифагора:

Площадь фигуры слева от линии разреза определяется суммой площадей прямоугольного треугольника:

s1 = 0,5 x y

и сектора:

s2 = 0,5 R2 (α – sin α), где α – центральный угол в радианах,

причем

α = arcsin(y/R).

Площадь всей фигуры (полукруга) определяется выражением:

S = π R2/2.

Программа решения задачи:

 

package javaapplication2;

// импорт библиотеки графических компонентов Swing

import javax.swing.*;

public class JavaApplication2 // описание главного класса

{

public static void main(String[] args)

{

// описание переменных:

double x, y, sLeft, sRight, alfa, sinAlfa, segment;

String input, text;

y=0.0;

sLeft=0.0;

sRight=0.0;

// вызов диалогового окна ввода исходных данных

input=JOptionPane.showInputDialog("Введите значение переменной x:");

// преобразование из строкового значения в вещественное

x=Double.parseDouble(input);

if (x<=1.0) //первый участок

{

y=Math.sqrt(1.0 - (x - 1.0) * (x - 1.0));

if (x<=0.0)

y=0.0;

}

Else

{ //второй участок

y=Math.sqrt(1.0 - (x - Math.floor(x)) * (x - Math.floor(x)));

if (x>=2.0)

y=0.0;

}

if (x==1.0) //двойной знак равенства!

{

sLeft=0.7854;

sRight=0.7854;

}

if (x<1.0) //первый участок

{

sinAlfa=y;

if (sinAlfa!=1.0)

alfa=Math.atan(sinAlfa/Math.sqrt(1.0 - sinAlfa*sinAlfa));

else alfa=Math.PI/2.0;

segment=0.5*(alfa - sinAlfa);

sLeft=segment + 0.5*x*y;

sRight=Math.PI/2.0 - sLeft;

} //x<1.0

if (x>1.0) //второй участок

{

x=2.0-x;

sinAlfa=y;

if (sinAlfa!=1.0)

alfa=Math.atan(sinAlfa/Math.sqrt(1.0 - sinAlfa*sinAlfa));

else alfa=Math.PI/2.0;

segment=0.5*(alfa - sinAlfa);

sLeft=segment + 0.5*x*y;

sRight=Math.PI/2.0 - sLeft;

} //x>1.0

// формирование строки вывода

text="Результат работы программы:\ny=" + y + "\ns_left=" + sLeft + "\ns_right=" + sRight;

// вызов диалогового окна вывода

JOptionPane.showMessageDialog(null, text);

}

}

Переключатель

Часто приходится делать выбор не между двумя, а между несколькими путями решения задачи. Такую ситуацию называют переключателем:

 

В языке Java переключатель реализуется оператором switch (переключатель):

Switch (селектор)

{

case метка-1: оператор-1;

break;

case метка-2: оператор-2;

break;

case метка-3: оператор-3;

break;

.................

default: оператор-n;

}

 

где switch - служебное слово переключатель,

case - служебное слово вариант,

селектор - переменная или выражение целого или символьного типов (обязательно ставится в скобках);

метка-1, метка-2,… - метки вариантов – значения селектора –

целые числа, символы или имена констант,

break - служебное слово прервать,

default - служебное слово по умолчанию (не обязательно).

Действия оператора:

1. вычисляется значение селектора,

2. это значение отыскивается среди меток вариантов,

3. выполняется оператор, стоящий за найденной меткой,

4. если далее стоит оператор break, то осуществляется выход из переключателя, иначе выполняется следующий оператор в нем,

5. если метка не найдена, то выполняется оператор, стоящий за словом default.

В любой ветви оператора swith могут стоять несколько меток вариантов, разделенных двоеточием:

Switch (селектор)

{

case метка-1: case метка-2: case метка-3: оператор-1;

break;

case метка-4: case метка-5: оператор-2;

break;

case метка-6: оператор-3;

break;

.................

default: оператор-n;

}

Эту структуру можно представить в следующем виде:

Switch (селектор)

{

case метка-1:

case метка-2:

case метка-3: оператор-1;

break;

case метка-4:

case метка-5: оператор-2;

break;

case метка-6: оператор-3;

break;

.................

default: оператор-n;

}

Внимание! Метки вариантов не должны повторяться!

Если в переключателе убрать операторы break, то после выполнения оператора, стоящего за найденной меткой вариантов, выполняются все оставшиеся операторы, в том числе и оператор после слова default:

int i;

String input;

input=JOptionPane.showInputDialog("Введите цифру:");

// преобразование из строкового значения в целое

i=Integer.parseInt(input);

Switch (i)

{

case 0: System.out.printf(“\nЭто цифра ноль”);

case 1: case 2: System.out.printf(“\nЭто цифра один или два”);

default: System.out.printf(“\nЭто неизвестная цифра”);

}

При вводе цифры 0 на экран будут выведены сообщения:

Это цифра ноль

Это цифра один или два

Это неизвестная цифра

Для того, чтобы после выполнения нужной ветви оператора switch другие операторы не выполнялись, каждая ветвь должна заканчиваться оператором break:

int i;

String input;

input=JOptionPane.showInputDialog("Введите цифру:");

// преобразование из строкового значения в целое

i=Integer.parseInt(input);

Switch (i)

{

case 0: System.out.printf(“\nЭто цифра ноль”);

break;

case 1: case 2: System.out.printf(“\nЭто цифра один или два”);

break;

default: System.out.printf(“\nЭто неизвестная цифра”);

}

В этом случае после ввода цифры 0 на экран будет выведено только одно сообщение:

Это цифра ноль

Если в каждой ветви switch стоит не по одному, а по нескольку операторов, то необходимо брать их в фигурные скобки:

Switch (селектор)

{

case метка-1:

{

оператор;

оператор;

оператор;

break;

}

case метка-2:

{

оператор;

оператор;

break;

}

.................

default:

{

оператор;

оператор;

}

}

Для улучшения читаемости программы необходимо использовать сдвиг операторов.

Можно использовать вложенные операторы switch, при этом в разных операторах могут быть одинаковые метки вариантов:

Switch (n)

{

case 0: оператор;

break;

Case 1: switch (m)

{

case 0: оператор;

break;

case 1: оператор;

break;

default: оператор;

}

case 3: оператор;

break;

.................

default: оператор;

}

Пример: по заданному номеру месяца года определить количество дней в нем. В этом переключателе всего три ветви:

int month;

String input;

input=JOptionPane.showInputDialog("Введите номер месяца:");

// преобразование из строкового значения в целое

month=Integer.parseInt(input);

Switch (month)

{

case 1: case 3: case 5:

case 7: case 8: case 10:

case 12: System.out.printf(“\n31 день”);

break;

case 4: case 6: case 9:

case 11: System.out.printf(“\n30 дней”);

break;

case 2: System.out.printf(“\n28 дней”);

break;

default: System.out.printf(“\nТакого месяца нет\n”);

}

Часто встречающиеся ошибки программирования:

1. Точка с запятой после скобок селектора:

switch (n);

{

case 0: оператор;

break;

..........

2. Отсутствие фигурных скобок после слова switch:

Switch (n)

case 0: оператор;

break;

..........

3. Перечисление меток вариантов без слов case:

Switch (n)

{

case 0, 1, 2: n++;

break;

..........

4. Перечисление меток вариантов через запятые:

Switch (n)

{

case 0, case 1, case 2: n++;

break;

..........

5. Отсутствие оператора break после ветвей переключателя:

Switch (n)

{

case 0: case 1: case 2: n++;

case 3: n--;

..........

Циклы

Одним из самых ценных свойств компьютеров является их способность многократно повторять последовательность одинаковых или похожих действий - циклов.

Являясь наиболее мощными структурами алгоритмических языков, циклы подразделяются на:

1. бесконечные циклы,

2. циклы с предусловием (циклы типа ПОКА),

3. циклы с постусловием (циклы типа ДО),

4. циклы с параметром (циклы типа ДЛЯ).

 

Бесконечные циклы

Бесконечный цикл может быть представлен следующей схемой:

 

int i=0, n=5;

//следующие операторы образуют бесконечный цикл:

while (i<=n)

{

i++;

i--;

}

Как правило, появление в программе бесконечных циклов вызвано логическими ошибками, допущенными программистом при разработке алгоритма и кодировании (написании операторов программы). Бесконечные циклы не выявляются комилятором при синтаксическом контроле и проявляются только после запуска программы на выполнение следующим образом:

1. длительное время (десятки секунд) программа не выводит на устройство вывода никакой информации – программа зависает,

2. на устройство вывода постоянно выводится одна и та же информация.

Таким образом, бесконечные циклы – это логические ошибки программиста. С ними сталкивается любой программист, и поэтому необходимо овладеть методами их поиска.

Циклы с предусловием

Как правило, некоторую цепочку операторов необходимо повторять не бесконечно, а до тех пор, пока выполняется некоторое условие:



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: