Упражнения на программирование

Лабораторная работа №1,2

Часть №1 Основы Языка Java, массивы, примитивные типы, объявление классов

Цели работы.

Целями практического занятия являются:

•знакомство с основными синтаксическими конструкциями языка Java;

•изучение структуры консольного приложения на языке Java;

•работа со стандартными потоками ввода/вывода;

•получение навыков работы с командной строкой;

Предметом изучения являются методы и свойства следующих классов платформы J2SE:

•классы-оболочки над примитивными типами java.lang.Integer, java.lang.Double, java.lang.Float;

•класс объявляемой исключительной ситуации java.lang.Exception;

•класс java.lang.Math;

•классы, предназначенные для работы с потоками ввода-вывода - java.io.InputStreamReader, java.io.InputStream, java.io.PrintStream

Упражнения на программирование

1. Реализовать приложение для введенной с консоли последовательности целых чисел вычисляющее следующие функции: нахождение среднего значения, максимального значения, минимального значения, произведения, суммы, разности значений. В качестве объекта, применяемого для хранения последовательности целых чисел, использовать массив. Методы, реализующие данные функции должны иметь прототипы следующего вида:

public static int getSumNumbers(int[] numbers);

2. Дополнить приложение из упражнения 1, методами, реализующими аналогичные операции над числами типа Double, перегружающие одноименные методы, реализованные в упражнении 1, с функцией проверки вводимых значений на соответствие тому или иному типу. Проверку выполнять в методе main приложения. В случае, если хотя бы одно из значений не соответствует одному из заданных типов, в консоль должно быть выведено сообщение об ошибке и программа должна завершить свою работу.

3. Изменить приложение, реализованное в упражнении 2, таким образом, чтобы последовательность чисел передавалась как параметр командной строки.

4. Спроектировать и реализовать класс для обработки исключительной ситуации, возникающей в том случае, если элемент последовательности не является числом, с возможностью представления информации об элементе, обработка которого вызвала исключительную ситуацию. Изменить приложение, таким образом, чтобы метод разбора последовательности обладал возможностью генерировать исключительную ситуацию являющуюся объектом заданного класса.

5. Дополнить приложение таким образом, чтобы имелась возможность формирования исходной числовой последовательности состоящих из чисел сформированных генератором случайных чисел.

6. Реализовать класс, в который выделены методы, реализованные в пунктах 1-5.

Задачи

1. Проанализируйте следующий код метода. Что произойдет в результате его вызова?

public void doSomething(){

int x;

double y;

x=(int)Math.random();

y=Math.ceil((double)(int)Math.random());

do{

System.out.println(x/y);

} while (x<y);

}

2. Какие из перечисленных ниже объявлений методов не являются допустимыми и по какой причине?

1. public final abstract int doAnything();

2. public abstract int doA(int j);

3. public private void notC(boolean flag);

4. final abstract boolean isEqual(float c, float d);

Контрольные вопросы

1. К какому виду исключительных ситуаций относится реализованная в упражнении 4.

2. Какие классы вы использовали для проверки типа элемента последовательности?

3. Почему все методы реализующие операции, указанные в задании объявляются как статические?

4. Что такое расширяющее преобразование типов?

5.Что такое примитивный тип в Java?

Часть №2 Основы Языка Java, перегрузка и перекрытие методов, наследование

Цели работы

Целями работы являются:

•изучение принципов ООП в языке Java, использования перегрузки и перекрытия методов;

•получения представления о практическом назначении и использовании модификаторов объявлений классов, методов и полей;

•получение навыков проектирования и реализации иерархии классов;

•изучение методов обработки исключительных ситуациях;

•получение навыков описания собственных исключительных ситуациях;

•получение навыков использования класс java.lang.Math для выполнения математических расчетов;

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

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

•классы-оболочки над примитивными типами java.lang.Integer,java.lang.Double, java.lang.Float;

•класс объявляемой исключительной ситуации java.lang.Exception;

•класс java.lang.Math;

Упражнения на программирование

1. Реализовать приложение, вычисляющее для последовательности чисел, представляющих величины углов, следующие тригонометрические функции:

•сумма синусов/косинусов значений,

•разность синусов/косинусов значений,

•произведение синусов/косинусов введенных значений.

Единица измерения углов должна указываться как параметр командной строки. Для представления единиц измерения используйте константы с типом int. Для хранения значений, необходимо использовать массив с типом double. Объявления методов должны выглядеть следующим образом:

/**

@param angles – массив значений углов;

@param type - единица измерения, имеющее значение одной из констант

@return сумму синусов значений углов;

*/

public static double getSumSinuses(double[] angles, int type);

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

3. Дополнить приложение, таким образом, чтобы имелась возможность формирования исходной числовой последовательности числами, сформированными генератором случайных чисел.

4. Реализовать класс объявляемой исключительной ситуации, для проверки корректности вводимых данных. Объект данной исключительной ситуации должен содержать в себе информацию о значении, обработка которого вызвала данную исключительную ситуацию.

5. Реализовать класс, в котором будут содержаться все описанные выше функциональные возможности.

Задачи

1. Пусть объявлен следующий класс:

package javaapplication2;

private class Sample {

private static int value;

static{

value=1;

}

private int n;

Sample(){

value++;

n=value%2;

}

Sample(int n){

this();

n=this.n;

}

public int getN(){

return(n<10?n=value++:n);

}

}

Что произойдет в результате выполнения следующего метода?:

/*

..

**/

public void test(){

for (int x=0;x<10;x++)

{

System.out.println(new Sample(x));

}

}

2. Какие из перечисленных объявлений полей класса являются

недопустимыми и допустимыми и почему?

1. public final int 1v=2;

2. public final int 'xxx'=2;

3. public final int \u1000=1000;

4. public final static volatile boolean bool=true;

5. static volatile Boolean v2=Boolean.parseBoolean("true");

Контрольныевопросы

1. Дайте определения понятиям статический метод и статическое поле класса.

2. Что такое явное и неявное приведение типов?

3. Какие методы классов-оболочек над примитивными типами используются для получения значения примитивного типа из его строкового представления.

4. Для какого примитивного типа не существует класса-оболочки?