LINUX.ORG.RU

История изменений

Исправление iZEN, (текущая версия) :

Ввод значений элементов массива из стандартного потока:

import java.util.Locale;
import java.util.Scanner;

public class ArrayInputFromStdIn {

    public static double [] interactiveBuildDoubleArray() {

        int arraysize = 0;

        Scanner coin = new Scanner(System.in);
        coin.useLocale(Locale.ENGLISH);//Точка вместо десятичной запятой

        System.out.print("Введите размер массива: ");
        while(coin.hasNext()) {
            //System.out.println("Попытка ввода размера.");
            if(coin.hasNextInt()) {
                arraysize = coin.nextInt();
                System.out.printf("Размер массива %s элементов.\n", arraysize);
                break;
            } else {
                String str = coin.next();
                System.out.println("Ошибочный формат значения. Повторите ввод размера массива.");
            }
        }
        double [] n = new double [arraysize];

        System.out.printf("Создан массив из %s элементов.\n", n.length);

        int count = 0;
        //coin.useDelimiter(", ");
        System.out.println("Введите значения элементов массива в строку через пробел или по одному:");
        while(coin.hasNext()) {
            System.out.printf("Ввод значения элемента [%s]. ", count);
            if(coin.hasNextDouble()) {
                double k = coin.nextDouble();
                n[count] = k;
                System.out.printf("Элемент [%s] = %s записан.\n", count, n[count]);
                count++;
            } else {
                System.out.println("Нераспознанный формат. Повторите ввод последнего значения.");
                String str = coin.next();
            }
            if (count > n.length-1) break;
        }
        return n;
    }

    /** Тестовая процедура */
    public static void main(String [] args) {
        double [] a = interactiveBuildDoubleArray();
        double sum = 0.0;
        for(double x : a) { sum += x; }
        System.out.println("Среднее значение = " + sum / a.length);
    }
}
Изменённая программа:
/** Основная программа демонстрации операций с массивами */
public class ArrayOperationDemo {

    //Утилита формирования результата
    static String printResults(StringImageNumericArray im, NumericArrayFunc naf, double [] m) {
        String result = "Среднее значение элементов массива " + im.getImage(m) + " = ";
        try {
            result += naf.func(m);
        } catch (EmptyArrayException e) {
            result += e.getMessage();
        }
        return result;
    }

    public static void main(String [] args) {

        //Тестовые данные
        final double [] values1 = {1.0, 2.0, 3.0, 4.0};
        final double [] values2 = {-11.0, 4, -562.0, 3.0, 400.0};
        final double [] empty = {};
        final double [] values3 = ArrayInputFromStdIn.interactiveBuildDoubleArray();

        //Способ отображения массива
        StringImageNumericArray image = a -> {
            String shape = "[";
            for(int i = 0; i < a.length-1; i++)
                shape += a[i] + ", ";
            if(a.length > 0)
                shape += a[a.length-1];
            return shape + "]";
        };

        //Способ обработки (в данном случае - вычисления среднего значения) элементов массива
        NumericArrayFunc average = n -> {
            double sum = 0;
            if(n.length == 0)
                throw new EmptyArrayException();
            for (double aN : n) sum += aN;
            return sum / n.length;
        };

        //Вывод результата
        System.out.println(printResults(image, average, values1));
        System.out.println(printResults(image, average, values2));
        System.out.println(printResults(image, average, empty));
        System.out.println(printResults(image, average, values3));
    }
    /* Результат выполнения
Введите размер массива: 4
Размер массива 4 элементов.
Создан массив из 4 элементов.
Введите значения элементов массива в строку через пробел или по одному:
56
Ввод значения элемента [0]. Элемент [0] = 56.0 записан.
-38.4 16.982
Ввод значения элемента [1]. Элемент [1] = -38.4 записан.
Ввод значения элемента [2]. Элемент [2] = 16.982 записан.
хренотень
Ввод значения элемента [3]. Нераспознанный формат. Повторите ввод последнего значения.
45.782
Ввод значения элемента [3]. Элемент [3] = 45.782 записан.
Среднее значение элементов массива [1.0, 2.0, 3.0, 4.0] = 2.5
Среднее значение элементов массива [-11.0, 4.0, -562.0, 3.0, 400.0] = -33.2
Среднее значение элементов массива [] = Массив пуст!
Среднее значение элементов массива [56.0, -38.4, 16.982, 45.782] = 20.091
     */
}

Исходная версия iZEN, :

Получите

Ввод значений элементов массива из стандартного потока:

package floresiris.demo.lambda.arrayoperation;
/**
 * Created by igor on 12.03.17.
 */
import java.util.Locale;
import java.util.Scanner;

public class ArrayInputFromStdIn {

    public static double [] interactiveBuildDoubleArray() {

        int arraysize = 0;

        Scanner coin = new Scanner(System.in);
        coin.useLocale(Locale.ENGLISH);//Точка вместо десятичной запятой

        System.out.print("Введите размер массива: ");
        while(coin.hasNext()) {
            //System.out.println("Попытка ввода размера.");
            if(coin.hasNextInt()) {
                arraysize = coin.nextInt();
                System.out.printf("Размер массива %s элементов.\n", arraysize);
                break;
            } else {
                String str = coin.next();
                System.out.println("Ошибочный формат значения. Повторите ввод размера массива.");
            }
        }
        double [] n = new double [arraysize];

        System.out.printf("Создан массив из %s элементов.\n", n.length);

        int count = 0;
        //coin.useDelimiter(", ");
        System.out.println("Введите значения элементов массива в строку через пробел или по одному:");
        while(coin.hasNext()) {
            System.out.printf("Ввод значения элемента [%s]. ", count);
            if(coin.hasNextDouble()) {
                double k = coin.nextDouble();
                n[count] = k;
                System.out.printf("Элемент [%s] = %s записан.\n", count, n[count]);
                count++;
            } else {
                System.out.println("Нераспознанный формат. Повторите ввод последнего значения.");
                String str = coin.next();
            }
            if (count > n.length-1) break;
        }
        return n;
    }

    /** Тестовая процедура */
    public static void main(String [] args) {
        double [] a = interactiveBuildDoubleArray();
        double sum = 0.0;
        for(double x : a) { sum += x; }
        System.out.println("Среднее значение = " + sum / a.length);
    }
}
Изменённая программа:
package floresiris.demo.lambda.arrayoperation;
/**
 * Лямбда-выражения и исключения
 * Created by igor on 11.03.17
 */

/** Основная программа демонстрации операций с массивами */
public class ArrayOperationDemo {

    //Утилита формирования результата
    static String printResults(StringImageNumericArray im, NumericArrayFunc naf, double [] m) {
        String result = "Среднее значение элементов массива " + im.getImage(m) + " = ";
        try {
            result += naf.func(m);
        } catch (EmptyArrayException e) {
            result += e.getMessage();
        }
        return result;
    }

    public static void main(String [] args) {

        //Тестовые данные
        final double [] values1 = {1.0, 2.0, 3.0, 4.0};
        final double [] values2 = {-11.0, 4, -562.0, 3.0, 400.0};
        final double [] empty = {};
        final double [] values3 = ArrayInputFromStdIn.interactiveBuildDoubleArray();

        //Способ отображения массива
        StringImageNumericArray image = a -> {
            String shape = "[";
            for(int i = 0; i < a.length-1; i++)
                shape += a[i] + ", ";
            if(a.length > 0)
                shape += a[a.length-1];
            return shape + "]";
        };

        //Способ обработки (в данном случае - вычисления среднего значения) элементов массива
        NumericArrayFunc average = n -> {
            double sum = 0;
            if(n.length == 0)
                throw new EmptyArrayException();
            for (double aN : n) sum += aN;
            return sum / n.length;
        };

        //Вывод результата
        System.out.println(printResults(image, average, values1));
        System.out.println(printResults(image, average, values2));
        System.out.println(printResults(image, average, empty));
        System.out.println(printResults(image, average, values3));
    }
    /* Результат выполнения
Введите размер массива: 4
Размер массива 4 элементов.
Создан массив из 4 элементов.
Введите значения элементов массива в строку через пробел или по одному:
56
Ввод значения элемента [0]. Элемент [0] = 56.0 записан.
-38.4 16.982
Ввод значения элемента [1]. Элемент [1] = -38.4 записан.
Ввод значения элемента [2]. Элемент [2] = 16.982 записан.
хренотень
Ввод значения элемента [3]. Нераспознанный формат. Повторите ввод последнего значения.
45.782
Ввод значения элемента [3]. Элемент [3] = 45.782 записан.
Среднее значение элементов массива [1.0, 2.0, 3.0, 4.0] = 2.5
Среднее значение элементов массива [-11.0, 4.0, -562.0, 3.0, 400.0] = -33.2
Среднее значение элементов массива [] = Массив пуст!
Среднее значение элементов массива [56.0, -38.4, 16.982, 45.782] = 20.091
     */
}