Найти мин, макс и среднее с другим типом символов
Мне удалось найти минимальное, максимальное и среднее в моем коде. Код как это:
import java.util.Scanner;
public class Tugas {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int count = 0;
double countTotal = 0;
//... Buat Perulangannya
System.out.print("Enter values (separate by space) : ");
while (input.hasNextDouble() ) {
//... Get the next value.
double value = input.nextDouble();
//... Compare this value to max and min. Replace if needed.
if (value > max) {
max = (int) value;
}
if (value < min) {
min = (int) value;
}
//... Keep track of these values for average calculation.
count++; // Count the number of data points.
countTotal += value; // Keep a running total.
}
//... Be sure user entered at least one data point.
if (count > 0) { //Note 2
//... Display statistics
double rata = countTotal / count;
System.out.println("Min = " + min);
System.out.println("Max = " + max);
System.out.println("Average = " + rata);
} else {
System.out.println("No Data...!");
}
}
}
Ок, если я ввожу: введите значения: 1 2 3 4 5, вывод: min 1, max= 5, среднее = 3.0
проблема в том, что мой код не считается автоматически, когда я нажимаю "ввод".
И как, когда я введу: AB 8 9 7 CD будет зацикливаться, пока не получите правильный ввод
Итак: введите значения: a b 8 9 7 c d it print "Пожалуйста, введите тип цифры" Введите значения:6 2 4 6 7 2 3 5 3 мин: 2 макс: 7 в среднем: 4.2222
Спасибо
1 ответ
Вот небольшая модификация, которая принимает всю строку из сканера, а затем анализирует ее. Он проверяет строку при разборе, согласно вашим спецификациям, зацикливание, если ввод неверен.
Вы уверены, что хотите, чтобы min и max были приведены к типу int? Остальная часть приложения, кажется, имеет дело с двойными.
импорт java.util.Scanner;
public class Tugas {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int count = 0;
double countTotal = 0;
//... Buat Perulangannya
boolean validinput = false;
String valueSetLine = null;
while (!validinput) {
System.out.print("Enter values (separate by space) : ");
valueSetLine = input.nextLine();
if (valueSetLine.matches("^(-|-?\\d*\\.?\\d+(\\s-?\\d*\\.?\\d*)*)$")) {
System.out.println("valid string");
validinput = true;
} else {
System.out.println("invalid input");
}
}
String[] doubleStrs = valueSetLine.split("\\s");
double[] values = new double[doubleStrs.length];
int i = 0;
for (String s : doubleStrs) {
try {
double d = Double.parseDouble(s);
values[i] = d;
i++;
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
}
}
for (double value : values) {
//... Compare this value to max and min. Replace if needed.
if (value > max) {
max = (int) value;
}
if (value < min) {
min = (int) value;
}
//... Keep track of these values for average calculation.
count++; // Count the number of data points.
countTotal += value; // Keep a running total.
}
//... Be sure user entered at least one data point.
if (count > 0) { //Note 2
//... Display statistics
double rata = countTotal / count;
System.out.println("Min = " + min);
System.out.println("Max = " + max);
System.out.println("Average = " + rata);
} else {
System.out.println("No Data...!");
}
}
}