Глава 6
Задача 6.8 "Полезные методы."
Напишите класс, методы которого принимали бы в качестве одного из параметров массив целых чисел и могли бы выполнить следующее:
- найти максимальный элемент
- определить равны ли значения элементов
- определить сколько раз возникает ситуация, когда значение элемента оказывается больше некоторого заданного уровня.
В этот класс мы хотели бы так же добавить методы, позволяющие:
- найти максимальный элемент, и если таких элементов несколько, зафиксировать их позиции
- определить диапазон значений массива
Подумайте, почему труднее создать эти два метода и какой вариант взаимодействия между массивом и классом подойдет для реализации поставленной задачи?
Решение 5
- определить диапазон значений массива
Для решения этой задачи напишем функцию:
void rangeInt(int mas[], int n, int mas2[]){
for (int i = 0; i < n; i++) {
//System.out.println("Highest fun = " + highest);
mas2[0] = highest;
min = highest;
for (int i = 0; i < n; 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
Назад |
Начало урока |
Вверх |
Вперед
Содержание