История изменений
Исправление 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
*/
}