Пользователь вводит строку с числами. Напишите программу которая выведет все числа, присутствующие в строке, а также выведет максимальное и минимальное число. Числом является любая последовательность цифр. Если между двумя числ...
Пользователь вводит строку с числами. Напишите программу
которая выведет все числа, присутствующие в строке, а также выведет
максимальное и минимальное число. Числом является любая
последовательность цифр. Если между двумя числами находится знак
математической операции – результатом будет результат вычисления
математической операции.
Пример:
Если дана строка: 123_2*14ghfg003sad15/2dasdasd8.10
Программа должна вывести:
Numbers:
123
28
3
7
8
10
Max: 123
Min: 3
На Java.
Ответ(ы) на вопрос:
Гость
import java.util.*;
import java.util.regex.*;
import java.lang.*;
import java.io.*;
class IntInStr
{
public static void main (String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string;
string = br.readLine();
String[] parts = string.split("[^\\d+\\-*/]+");
Vector nums = new Vector();
for(String part : parts) {
Matcher isnum = Pattern.compile("^\\d+$").matcher(part);
Matcher isnumop = Pattern.compile("^(\\d+)([+*/-])(\\d+)$").matcher(part);
if (isnum.matches()) {
int ipart = Integer.parseInt(part);
nums.add(ipart);
}
if (isnumop.matches()) {
int l = Integer.parseInt(isnumop.group(1)),
r = Integer.parseInt(isnumop.group(3)),
res;
String operation = isnumop.group(2);
switch(operation) {
case "+":
res = l + r;
break;
case "-":
res = l - r;
break;
case "*":
res = l * r;
break;
case "/":
res = l / r;
break;
default:
throw new ArithmeticException("token parse error");
}
nums.add(res);
}
}
int min = nums.get(0), max = nums.get(0);
System.out.println("Numbers:");
for (int n : nums) {
System.out.println(n);
if (n > max) {
max = n;
}
if (n < min) {
min = n;
}
}
System.out.format("Max: %d%nMin: %d%n", max, min);
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
Не нашли ответ?
Похожие вопросы