Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
1

Найти первый максимальный элемент массива из действительных чисел и заменить его нулем

13.01.2021, 00:06. Показов 2459. Ответов 40
Метки нет (Все метки)

Я в java впервые (до этого связывался с pascal-ем и C#) - просто алфавит плохо знаю...
У меня есть общая структура программы в которой выбирается как будут вводится данные (из консоли или из файла).

В данном коде (это как пример) у меня в файле LR1_3 в процедуре sortAndPrintNumbers выполняется само задание (если if истина, то вводятся данные через консоль, иначе через файл).

LR1_3.java
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.company;
import com.company.LabKits;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class LR1_3 {
    public static void main(String[] args) throws FileNotFoundException {
        int choice;
        choice = LabKits.getChoice();
        switch (choice) {
            case 1:
                System.out.println("111");
                sortAndPrintNumbers(false);
                break;
            case 2:
                sortAndPrintNumbers(true);
                break;
            default:
                System.out.println("До встречи!");
                break;
        }
    }
 
    private static void sortAndPrintNumbers(boolean fromFile) throws FileNotFoundException {
        if (!fromFile) {
            int a=0,b=0,c=0,n=0,sum,k=0;
            Scanner sc = new Scanner(System.in);
            System.out.println("Введите число k:");
            if(sc.hasNextInt()){
                k = sc.nextInt();
            }
            for(int i = 9; i < 1000; i++){
                if(i % k == 0){
                    a += i;
                }
            }
            sum = a ;
            System.out.println(sum);
        }
        else
        {
            System.out.println("Введите путь к файлу:");
            Scanner path = new Scanner(System.in);
            String stringPath = path.nextLine();
            File file = new File(stringPath);
            Scanner scanner = new Scanner(file);
            String input4 = scanner.nextLine();
            double X4 = Double.parseDouble(input4);
            int a=0,b=0,c=0,n=0,sum;
            Scanner sc = new Scanner(file);
            if(sc.hasNextInt()){
                X4 = sc.nextInt();
            }
            for(int i = 9; i <= 1000; i++){
                if(i % X4 == 0){
                    a += i;
                }
            }
            sum = a ;
            System.out.println(sum);
        }
    }
}

LabKits.java
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.company;
import java.util.Scanner;
public class LabKits {
    public static int getChoice() {
        int locChoice;
        System.out.println("Введите значение, если хотите ввести данные: \n" +
                "\t\'1\' - из консоли,\n" +
                "\t\'2\' - из файла,\n" +
                "\t\'3\' - выйти из программы;\n");
 
        while (true) {
            Scanner input = new Scanner(System.in);
            locChoice = input.nextInt();
            if (locChoice == 1 || locChoice == 2 || locChoice == 3) {
                break;
            } else {
                System.out.println("Введите лишь 1, 2 или 3");
            }
        }
        return locChoice;
    }
}


Помогите пожалуйста с заданиями:

У меня имеется два задания с которыми у меня возникли сложности:
1. Дан массив действительных чисел. Найти его первый максимальный элемент и заменить его нулем.
2. Если сумма трех различных чисел X, Y, Z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других; в противном случае заменить меньшее из X, Y полусуммой двух оставшихся значений.

по первому заданию у меня получилось выполнить в коде только следующее, я дальше просто не знаю что еще нужно дописать в коде в sortAndPrintNumbers для работоспособности программы.

Java
1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<k;i++) {
if(m[i]>=mz) {
mz=m[i];
}
}
for(int i=0; i<k;i++) {
if(m[i]==mz) {
m[i]=0;
break;
}
}
по второму заданию у меня не получается перевести имеющийся код с паскаля(конструктивно понимаю, но в java перевести не получается):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var x,y,z:real;
begin
clrscr;
repeat
writeln('Введите 3 разных действительных числа:');
readln(x,y,z);
until(x<>y)and(x<>z)and(y<>z);
if x+y+z<1 then
 begin
  if (x<y)and(x<z) then x:=(y+z)/2
  else if (y<x)and(y<z) then y:=(x+z)/2
  else if (z<x)and(z<y) then z:=(x+y)/2
 end
else
 begin
  if x<y then x:=(y+z)/2
  else if y<x then y:=(x+z)/2;
 end;
write('x=',x:0:2,'  y=',y:0:2,'  z=',z:0:2);
readln
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2021, 00:06
Ответы с готовыми решениями:

42. Дан массив действительных чисел. Среди них есть равные. Найти первый максимальный элемент массива и заменить его нулем
42. Дан массив действительных чисел. Среди них есть равные. Найти первый максимальный элемент...

Дан массив действительных чисел. Среди них есть равные. Найти его первый максимальный элемент и заменить его нулем.
Помогите решить в Паскаль пожалуйста!!!! 1)Даны два целых числа: D (день) и M (месяц),...

Дан массив действительных чисел. Среди них есть равные. Найти его первый максимальный элемент и заменить его нулем
2. Дан массив действительных чисел. Среди них есть равные. Найти его первый максимальный элемент и...

Дан массив действительных чисел, среди них есть равные. Найти первый максимальный элемент и заменить его нулем
Дан массив действительных чисел, среди них есть равные. Найти первый максимальный элемент и...

__________________

Записывайтесь на профессиональные курсы Java-разработчиков
Обучение в Java Mentor с оплатой после трудоустройства
40
59 / 40 / 20
Регистрация: 30.01.2019
Сообщений: 133
13.01.2021, 01:11 2
Лучший ответ Сообщение было отмечено xamelione25 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
 int[] numbers = {10,7,11,1,11,2};
        int max = numbers[numbers.length - 1];
        int index=numbers.length-1;
        for (int i = numbers.length - 2; i >= 0; i--) {
            if (numbers[i] >= max) {
                max = numbers[i];
                index = i;
            }
        }
        numbers[index] = 0;
        System.out.println(Arrays.toString(numbers));
по первому заданию. если не понятно спрашивайте.
[10, 7, 0, 1, 11, 2]

Добавлено через 11 минут
Java
1
2
3
4
5
6
7
8
 if ((x + y + z) < 1) {
            if (x < y && x < z) x = (y + z) / 2;
            else if (y < x && y < z) y = (x + z) / 2;
            else z = (x + y) / 2;
        } else {
            if (x<y)x=(y+z)/2;
            else y=(x+z)/2;
        }
по второму,мог ошибится. проверьте
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 13:06  [ТС] 3
kosta4310,
Цитата Сообщение от kosta4310 Посмотреть сообщение
int[] numbers = {10,7,11,1,11,2};
        int max = numbers[numbers.length - 1];
        int index=numbers.length-1;
        for (int i = numbers.length - 2; i >= 0; i--) {
            if (numbers[i] >= max) {
                max = numbers[i];
                index = i;
            }
        }
        numbers[index] = 0;
        System.out.println(Arrays.toString(numbers));
так он же у меня с клавиатуры вводится должен

Добавлено через 1 час 15 минут
kosta4310, тем более у меня он же ведь не определен количеством значений....
0
Aviz__
13.01.2021, 14:32
  #4

Не по теме:

Цитата Сообщение от xamelione25 Посмотреть сообщение
тем более
прикольно. чел те показал принципиальный путь, а ты ему вешаешь все! а сам то, что будешь делать, когда он подорвется ща переделывать?

0
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 14:34  [ТС] 5
Aviz__,

Не по теме:

не издевайтесь)

0
Aviz__
13.01.2021, 14:43
  #6

Не по теме:

xamelione25, да это ты стебешься над добротой kosta4310!

0
59 / 40 / 20
Регистрация: 30.01.2019
Сообщений: 133
13.01.2021, 15:18 7
Цитата Сообщение от xamelione25 Посмотреть сообщение
1. Дан массив действительных чисел.
Вроде четко написано ДАН МАССИВ
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 16:30  [ТС] 8
kosta4310,

я вот сделал .... но см.скрин
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
            Scanner input = new Scanner(System.in);
            System.out.println("Введите массив действительных чисел:");
            int size = input.nextInt();
            int array[] = new int[size];
            System.out.println("Insert array elements:");
            /*Пройдёмся по всему массиву, заполняя его*/
            for (int i = 0; i < size; i++) {
                array[i] = input.nextInt(); // Заполняем массив элементами, введёнными с клавиатуры
            }
            System.out.print ("Inserted array elements:");
            for (int i = 0; i < size; i++) {
                System.out.print (" " + array[i]); // Выводим на экран, полученный массив
            }
            System.out.println();
            int max = array[array.length - 1];
            int index=array.length-1;
            for (int i = array.length - 2; i >= 0; i--) {
                if (array[i] >= max) {
                    max = array[i];
                    index = i;
                }
            }
            array[index] = 0;
            System.out.println(Arrays.toString(array));
Просто не понятно почему не выводится массив веденных элементов, и почему измененный массив выводится только частично?
0
Миниатюры
Найти первый максимальный элемент массива из действительных чисел и заменить его нулем  
59 / 40 / 20
Регистрация: 30.01.2019
Сообщений: 133
13.01.2021, 16:46 9
после
Цитата Сообщение от xamelione25 Посмотреть сообщение
"Введите массив действительных чисел:"
надо ввести размер массива

Добавлено через 1 минуту
вы ввели 2 -размер
и потом 1 10 -значения
вывод 1 0 - все правильно

если не учитывать что вы хотели ввести совсем не это
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 16:49  [ТС] 10
kosta4310, аааа .... все въехал...спс

Добавлено через 1 минуту
kosta4310, а для введения чисел в формате действительных.... достаточно ли будет все инты заменить на доублы или нужно будет еще что-то приписать (если да то тогда что)
0
59 / 40 / 20
Регистрация: 30.01.2019
Сообщений: 133
13.01.2021, 17:01 11
Цитата Сообщение от xamelione25 Посмотреть сообщение
инты заменить на доублы
заменить
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 17:05  [ТС] 12
kosta4310, и последнее подскажи а как эту часть утвета убрать....в упор не вижу эту часть в коде
0
Миниатюры
Найти первый максимальный элемент массива из действительных чисел и заменить его нулем  
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 18:58  [ТС] 13
kosta4310, последний вопрос аннулирован

Добавлено через 1 час 21 минуту
kosta4310, что-то у меня не получается заменить int на double ... пожете подсказать что нужно для этого поменять?
0
1893 / 1509 / 374
Регистрация: 17.02.2014
Сообщений: 7,613
13.01.2021, 19:25 14
xamelione25,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Введите размер массива действительных чисел:");
        int size = input.nextInt();
        double[] dblArray = new double[size];
        input.skip("\\n");
        System.out.println("Insert array elements:");
        /*Пройдёмся по всему массиву, заполняя его*/
        for (int i = 0; i < size; i++) {
            dblArray[i] = input.nextDouble(); // Заполняем массив элементами, введёнными с клавиатуры
        }
        System.out.println(Arrays.toString(dblArray));
    }
резулт
Кликните здесь для просмотра всего текста

Введите размер массива действительных чисел:
2
Insert array elements:
2,11
1,33
[2.11, 1.33]
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
13.01.2021, 19:53  [ТС] 15
kosta4310, Aviz__, я уже это сделал вроде....

но что-то не так (см.скрин)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    private static void sortAndPrintNumbers(boolean fromFile) throws FileNotFoundException {
        if (!fromFile) {
            Scanner input = new Scanner(System.in);
            System.out.println("Введите мощность массива");
            int size = input.nextInt();
            Double array[] = new Double [size];
            /*Пройдёмся по всему массиву, заполняя его*/
            System.out.println("Введите элементы массива");
            for (int i = 0; i < size; i++) {
                array[i] = input.nextDouble(); // Заполняем массив элементами, введёнными с клавиатуры
            }
            System.out.println("Введенный массив");
            for (int i = 0; i < size; i++) {
                System.out.print(" " + array[i]); // Выводим на экран, полученный массив
            }
            System.out.println();
            double max = array[array.length - 1];
            int index=array.length-1;
            for (int i = array.length - 2; i >= 0; i--) {
                if (array[i] >= max) {
                    max = array[i];
                    index = i;
                }
            }
            array[index] = Double.valueOf(0);
            System.out.println("Сформированный массив:");
            System.out.println(Arrays.toString(array));
        }
        else
        {
            System.out.println("Введите путь к файлу:");
            Scanner path = new Scanner(System.in);
            String stringPath = path.nextLine();
            File file = new File(stringPath);
            Scanner scanner = new Scanner(file);
            String input4 = scanner.nextLine();
            int array = (int) Double.parseDouble(input4);
 
            System.out.println();
            double max = array[array.length - 1];
            int index=array.length-1;
            for (int i = array.length - 2; i >= 0; i--) {
                if (array[i] >= max) {
                    max = array[i];
                    index = i;
                }
            }
            array[index] = Double.valueOf(0);
            System.out.println("Сформированный массив:");
            System.out.println(Arrays.toString(array));
        }
    }
у меня сейчас проблема возникла (возможно даже и не из-за double) с блоком который в else, который отвечает за прием массива не из метода ручного ввода (как в блоке выше в if), а из файла (из txt) ,

то есть в ручном вводе у меня происходит: ручной ввод - формирование массива - анализ массива - вывод результата

а здесь в блоке else у меня должен происходить анализ по уже имеющемуся массиву который лежит в txt. Тобишь у меня здесь должен произойти: открытие txt - анализ массива - вывод результата.

А по факту вылетают ошибки связанные с length и array (см.скрин).
0
Миниатюры
Найти первый максимальный элемент массива из действительных чисел и заменить его нулем  
59 / 40 / 20
Регистрация: 30.01.2019
Сообщений: 133
13.01.2021, 20:56 16
там где подсвечено
аррай это переменная типа инт, а не массив у которого есть длина.
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
14.01.2021, 02:05  [ТС] 17
kosta4310, решил сначала переделать....
что-то у меня не пошло...см.скрин...

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

подскажите в чем ошибка? помогите пожалуйста подправить. Система выдает ошибку якобы из 20 строки

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
            System.out.println("Введите путь к файлу:");
            Scanner path = new Scanner(System.in);
            String stringPath = path.nextLine();
            File file = new File(stringPath);
/*            Scanner scanner = new Scanner(file);
            String input4 = scanner.nextLine();
            int array = Integer.parseInt(input4);
            System.out.println(array);*/
 
            FileInputStream inFile = new FileInputStream(file);
            byte[] str = new byte[inFile.available()];
            inFile.read(str);
            String text = new String(str);
            String[] numbers = text.split("([^-\\d])|(-\\D)");
            int size = Integer.parseInt(numbers[0]);
            int[][] matr = new int[size][size];
            int i = 0, j = 0, k = 1;
            for (i = 0; i < size; ++i) {
                for (j = 0; j < size; ++j, ++k) {
                    if (!"".equals(numbers[k]))
                        matr[i][j] = Integer.parseInt(numbers[k]);
                    else
                        --j;
                }
            }
            for (i = 0; i < size; ++i, System.out.println()) {
                for (j = 0; j < size; ++j, ++k) {
                    System.out.print(matr);
                }
            }
 
 
/*                            System.out.println();
            int max = array[array.length - 1];
            int index = array.length-1;
            for (int i = array.length - 2; i >= 0; i--) {
                if (array[i] >= max) {
                    max = array[i];
                    index = i;
                }
            }
            array[index] = Double.valueOf(0);
            System.out.println("Сформированный массив:");
            System.out.println(Arrays.toString(array));*/
0
Миниатюры
Найти первый максимальный элемент массива из действительных чисел и заменить его нулем  
Супер-модератор
Эксперт PythonЭксперт Java
7497 / 4090 / 1521
Регистрация: 21.10.2017
Сообщений: 11,573
14.01.2021, 08:49 18
Цитата Сообщение от xamelione25 Посмотреть сообщение
String[] numbers = text.split("([^-\\d])|(-\\D)");

xamelione25, возьми сканнер, открой им файл, while scan.hasNextInt/scan.nextInt, складывай в ArrayList. Всё.
При желании int на double меняется на раз.
1
6 / 4 / 2
Регистрация: 04.02.2013
Сообщений: 1,415
14.01.2021, 08:53  [ТС] 19
iSmokeJC, возьми сканнер, открой им файл, while scan.hasNextInt/scan.nextInt, складывай в ArrayList

"На слух" не понял ... Сканнер ... Это что??? Я просто еще не сильно хорошо знаю просто язык этот (словарь).
0
Супер-модератор
Эксперт PythonЭксперт Java
7497 / 4090 / 1521
Регистрация: 21.10.2017
Сообщений: 11,573
14.01.2021, 08:55 20
Цитата Сообщение от xamelione25 Посмотреть сообщение
Сканнер ... Это что???
Цитата Сообщение от xamelione25 Посмотреть сообщение
Scanner
эмс
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2021, 08:55

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Найти первый максимальный элемент массива и заменить его нулем
Дан массив действительных чисел, среди которых есть равномерные. Найти первый максимальный элемент...

Найти первый максимальный элемент массива и заменить его нулем.
Доброй ночи! Может кто-то сможет мне сейчас помочь,очень прошу!!!Помогите решить задачу в Excel на...

Найти первый максимальный элемент массива и заменить его нулем
Дан массив действительных чисел. Среди них есть равные. Найти его первый максимальный элемент и...

Найти первый максимальный элемент массива и заменить его нулем
Дан массив действительных чисел, среди которых есть равномерные . Найти первый максимальный элемент...

Найти первый максимальный элемент массива и заменить его нулем
совершенно не понимаю информатику! ((( напишите пожалуйста решение задачик в vba... 1. Дан массив...

Найти первый максимальный элемент массива и заменить его нулем
Составить программу на Паскале, содержащую минимум четыре подпрограммы. Дан одномерный массив,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.