Невозможно доказать -100000000000000, пригодных для длинного ввода - PullRequest
0 голосов
/ 03 февраля 2019

Я написал программу, чтобы определить, соответствует ли какой-либо ввод диапазону различных типов данных в java, и печатает ли он допустимые типы данных.

Сначала программа принимает целочисленный ввод дляопределить общие константы, для которых я хочу проверить право.Затем он запускает цикл необходимое количество раз, определяемое запросом, для проверки соответствия каждой введенной константе.

Проблема, с которой я сталкиваюсь, заключается в том, что я проверяю соответствие для одного ввода, нокогда я ввожу «-100000000000000» (- 1, за которым следуют 14 нулей), выходной сигнал не поступает, и курсор принимает входной сигнал, а затем просто мигает бесконечно.

Любой другой постоянный ввод дает желаемый выход, но проблема с программой возникает только после того, как я ввожу «-100000000000000».Я уже давно пытаюсь решить эту проблему самостоятельно, и, следовательно, мне поможет любая возможность.

Вот мой код ->

import java.util.*;
import java.io.*;
import static java.lang.Math.pow;
class Solution{
public static void main(String []argh)
{



    Scanner sc = new Scanner(System.in);
    int t=sc.nextInt();

    for(int i=0;i<t;i++)
    {

        try
        {
            long x=sc.nextLong();
            System.out.println(x+" can be fitted in:");
            if(x>=-128 && x<=127){
                System.out.println("* byte");
            }
            if(x>=(int)(pow(-2.00,15.00)) && x<=(int)(pow(2.00,15.00)-1)){
                System.out.println("* short");
            }
            if(x>=(int)(pow(-2.00,31.00)) && x<=(int)(pow(2.00,31.00)-1)){
                System.out.println("* int");
            }
            if(x>=(int)(pow(-2.00,63.00)) && x<=(int)(pow(2.00,63.00)-1)){
                System.out.println("* long");
            }
        }
        catch(Exception e)
        {
            System.out.println(sc.next()+" can't be fitted anywhere.");
        }
    }
}
}

1 Ответ

0 голосов
/ 03 февраля 2019

Я вижу в вашем коде, что вы пытаетесь проанализировать pow(-2.00,63.00) в целое число, которое не вернет ожидаемое вами значение.

Вы можете просто заменить приведение в длинных данных.проверка типа так:

if(x>=(long)(pow(-2.00,63.00)) && x<=(long)(pow(2.00,63.00)-1)){
    System.out.println("* long");
}

Кроме того, на случай, если вы не знали, вы можете просто использовать "Long.MIN_VALUE | Long.MAX_VALUE" вместо "pow (-2.00,63.00) и pow(2.00,63.00) -1 "соответственно.То же самое касается других типов данных (Byte, Short, Integer).

...