Назад | Начало урока | Вперед
Содержание

Глава 6

Задача 6.8 "Полезные методы."

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

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

В этот класс мы хотели бы так же добавить методы, позволяющие:

- найти максимальный элемент, и если таких элементов несколько, зафиксировать их позиции
- определить диапазон значений массива

Подумайте, почему труднее создать эти два метода и какой вариант взаимодействия между массивом и классом подойдет для реализации поставленной задачи?

Решение 5

- определить диапазон значений массива

Для решения этой задачи напишем функцию:

void rangeInt(int mas[], int n, int mas2[]){

int highest = 0;
int min = 0;

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

if (mas[i] > highest) {
highest = mas[i];
}
}

//System.out.println("Highest fun = " + highest);
mas2[0] = highest;
min = highest;

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

if (mas[i] < min) {
min = mas[i];
}
}

mas2[1] = min;

}

- через параметр (массив) mas[] в функцию передается исходный массив
- n - длина исходного массива
- через параметр (массив) mas2[] функция выводит минимальное и максимальное значение в исходном массиве

Код программы:


class GoodMethods {
int masInt[] = new int[500]; // исходный массив
int masInt1[] = new int[500];// для хранения индексов
int masInt2[] = new int[2]; // для граничных значений
int masInt3[] = new int[500];// для хранения индексов

GoodMethods () {

//инициируем первый массив случайными значениями, остальные массивы - нулями
for(int i = 0; i < masInt.length;i++){
masInt[i] = random_01(1,100);
}
for(int i = 0; i < masInt1.length;i++){
masInt1[i] = 0;
}
for(int i = 0; i < masInt2.length;i++){
masInt2[i] = 0;
}
for(int i = 0; i < masInt3.length;i++){
masInt3[i] = 0;
}

BigMas bm = new BigMas();

//найдем максимальное значение
int k = bm.maxInt(masInt,masInt.length);
System.out.println(" Max element = " + k);

//количество повторений максимального значения в массиве
System.out.println(" Element max repeat in index " + bm.equalInt3(masInt,masInt.length, masInt1, masInt2));

// вот интересное выражение! Сначала работает функция bm.equalInt3 обрабатывая
// исходный массив и инициируя два внешних, потом возвращается значение и
// начинается работа цикла!

// выводим индексы максимальных значений for(int i = 0; i < bm.equalInt3(masInt,masInt.length, masInt1,masInt2);i++){

System.out.println("!!! "+ masInt1[i]);
}

//максимальное значение сохраняется в третьем массиве (результат работы функции equalInt3
System.out.println("highest "+ masInt2[0]);

//найдем граничные значения массива
bm.rangeInt(masInt,masInt.length, masInt2);

//выведем граничные значения
System.out.println(" Max value = "+ masInt2[0] +" Min value = " + masInt2[1]);

// выводим индексы минимальных значений
for(int i = 0; i < bm.equalInt2(masInt,masInt.length, masInt2[1],masInt3);i++){

System.out.println("min "+ masInt3[i]);
}

System.out.println();
// выводим индексы максимальных значений
for(int i = 0; i < bm.equalInt2(masInt,masInt.length, masInt2[0],masInt1);i++){

System.out.println("max "+ masInt1[i]);
}

}//GoodMethods construct

public static void main (String [ ] args) {

new GoodMethods ();
}

int random_01 (int min, int max ){

int z =0;
while(z < min ){
z = (int) (Math.random()* max);
}
return z;
}

}//GoodMethods

class BigMas{

BigMas(){}
//------------------
// находит и возвращает максимальный элемент
int maxInt(int mas[], int n){

int highest = 0;
for (int i = 0; i < n; i++) {
if (mas[i] > highest) {
highest = mas[i];
}
}
return highest;
}
//--------------------
// находит первое вхождение элемента, переданного в параметре
//и возвращает его индекс в противном случае -1
int equalInt(int mas[], int n, int eql){
int equal = eql;
int j = -1;
for (int i = 0; i < n; i++) {
j++;
if (mas[i] == equal) {
return j;
}
}
return -1;
}
//--------------------
// возвращает сколько раз данный элемент
// встречается в массиве
int equalInt1(int mas[], int n, int eql){
int equal = eql;
int j = 0;
for (int i = 0; i < n; i++) {
if (mas[i] == equal) {
j++;
}
}
return j;
}
//--------------------
// возвращает сколько раз встречаются элементы
// большие чем переданный в параметр

int moreInt(int mas[], int n, int m){

int more = m;
int j = 0;
for (int i = 0; i < n; i++) {
if (mas[i] > more) {
j++;
}
}
return j;
}
//------------------------
// через массив в параметре возвращает индексы, по которым
// в исходном массиве находится переданный элемент
// возвращает число повторений элемента в массиве
int equalInt2(int mas[], int n, int eql,int mas1[]){
int equal = eql;
int j = 0;
for (int i = 0; i < n; i++) {
if (mas[i] == equal) {
mas1[j] = i;
j++;
}
}
return j;
}
//------------------------
// находит наибольший элемент массива, и возвращает его через массив mas2.
// через массив mas1 в параметре возвращает индексы, по которым
// в исходном массиве находится данный элемент,
// возвращает число повторений элемента в массиве
int equalInt3(int mas[], int n, int mas1[], int mas2[]){
int highest = 0;
for (int i = 0; i < n; i++) {
if (mas[i] > highest) {
highest = mas[i];
}
}
mas2[0] = highest;
int j = 0;
for (int i = 0; i < n; i++) {
if (mas[i] == highest) {
mas1[j] = i;
j++;
}
}
return j;
}
//--------------------
void rangeInt(int mas[], int n, int mas2[]){
int highest = 0;
int min = 0;

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

if (mas[i] > highest) {
highest = mas[i];
}
}

//System.out.println("Highest fun = " + highest);
mas2[0] = highest;
min = highest;

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

if (mas[i] < min) {
min = mas[i];
}
}

mas2[1] = min;

}

}//BigMas


Результат :

Max element = 99
Element max repeat in index 5
!!! 62
!!! 73
!!! 80
!!! 92
!!! 343
highest 99
Max value = 99 Min value = 1
min 12
min 177
min 286
min 303
min 328
min 364
min 457

max 62
max 73
max 80
max 92
max 343


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz