В среде разработки программа показывает себя отлично. Вот разные вводные данные, которые я использовал:
-1 --> Это тип Integer, значение -1
0 --> Это тип Integer, значение 0
1 -- > Это тип short, значение 1
hey --> Это тип String, значение hey
128 --> Это тип Integer, значение 128
127.0 --> Это тип short, значение 127
127.127 --> Это тип Double, значение 127.127
hey.127 --> Это тип String, значение hey.127
127.hey --> Это тип String, значение 127.hey
. --> Это тип String, значение .
127.127.127 --> Это тип String, значение 127.127.127
exit
package com.javarush.task.task15.task1519;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.io.IOException;
public class Solution
{
public static void main(String[] args) throws IOException
{
ArrayList<String> listOfValues = new ArrayList<>();
//Создаем поток для считывания данных, заносим их в список выше;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true)
{
String str = reader.readLine();
if (str.equals("exit"))
{
break;
}
else
{
listOfValues.add(str);
}
}
reader.close();
//Начинаем обработку списка;
for (int i = 0; i < listOfValues.size(); i++)
{
//Получаем значение из списка;
String str = listOfValues.get(i);
try
{
double doub = Double.parseDouble(str); //Пытаемся преобразовать строку в число;
Double doubBig = doub;
String forDoub = doubBig.toString(); //Если преобразование закончилось успехом, переобразуем число обратно в строку для дальнейшей работы;
char[] charArr = forDoub.toCharArray();
int dot = 0; //Создаем переменную для запоминания индекса точки в массиве символов;
//Ищем точку для сохранения её индекса в переменную выше;
for (int o = 0; o < charArr.length; o++)
{
if (charArr[o] == '.')
{
dot = o;
break;
}
}
//Проверяем символы после точки на причастность к чему-то, отличного от нуля (признак Double переменной);
for (int o = dot + 1; o < charArr.length; o++)
{
int checkForOperateDouble = 0; //Переменная, которая увеличится при успешном срабатывании проверки на причастность к Double;
for (int l = 1; l < 10; l++)
{
int forArr = Character.getNumericValue(charArr[o]);
if (forArr == l)
{
checkForOperateDouble++;
Solution.print(doub);
break;
}
}
if (checkForOperateDouble > 0)
{
break;
}
else
{
if (doub > 0 && doub < 128) //Проверка на short;
{
int checkForOperateShort = 1;
short sho = (short) doub;
Solution.print(sho);
if (checkForOperateShort > 0)
{
break;
}
}
else if (doub <= 0 || doub >= 128) //Проверка на Integer;
{
int checkForOperateInt = 1;
int inT = (int) doub;
Solution.print(inT);
if (checkForOperateInt > 0)
{
break;
}
}
}
}
}
catch (NumberFormatException err)
{
Solution.print(str);
}
}
}
public static void print(Double value) {
System.out.println("Это тип Double, значение " + value);
}
public static void print(String value) {
System.out.println("Это тип String, значение " + value);
}
public static void print(short value) {
System.out.println("Это тип short, значение " + value);
}
public static void print(Integer value) {
System.out.println("Это тип Integer, значение " + value);
}
}