Java误判了原始数据类型?

Java误判了原始数据类型?,java,types,primitive,Java,Types,Primitive,问题:我无法存储号码“600851475143”。我意识到这个数字大于int所能容纳的值,小于最大长值。然而,我的程序并没有将变量“number”注册为long,而是将其注册为int。有人能解释一下这个问题吗 **-问题所在 public class Problem3{ //What is the largest prime factor of the number 600851475143 public static void main(String[] args){ ***long nu

问题:我无法存储号码“600851475143”。我意识到这个数字大于int所能容纳的值,小于最大长值。然而,我的程序并没有将变量“number”注册为long,而是将其注册为int。有人能解释一下这个问题吗

**-问题所在

public class Problem3{
//What is the largest prime factor of the number 600851475143
public static void main(String[] args){
  ***long number = 600851475143 , total = 0;
    for(long x = (number-1)/2; x>1; x--)
      if(number%x == 0 && isPrime(x)) total += x;
    System.out.println(total);
}
private static boolean isPrime(long determine){
  for(long x = determine/2 - 1; x>1; x--)
    if(determine%x ==0) return false;
  return true;
}
}

解决方案:正如Jim在下面所说的,为了输入long,必须在数字的末尾加上“L”或“L”。 “如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。”-来自Oracle site on Primitive type

更多信息:

在此文本值中加一个小“L”:

 600851475143L
原因是:

如果整型文字以字母L或L结尾,则其类型为long;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分

为了更清楚,您也可以使用此符号:

 600_851_475_143L

在此文本值中输入一个小“L”:

 600851475143L
原因是:

如果整型文字以字母L或L结尾,则其类型为long;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分

为了更清楚,您也可以使用此符号:

 600_851_475_143L
“我的程序没有将变量“number”注册为long,而是 将其注册为int”

那是不对的。你宣布它是一个长期的。这是一个漫长的过程

您必须得到的是完全不同的东西:常数600851475143上的编译错误。试试600851475143L。我建议,如果您更仔细地阅读编译器错误消息,您会看到这一点

“我的程序没有将变量“number”注册为long,而是 将其注册为int”

那是不对的。你宣布它是一个长期的。这是一个漫长的过程



您必须得到的是完全不同的东西:常数600851475143上的编译错误。试试600851475143L。我建议,如果您更仔细地阅读编译器错误消息,您会看到。

长文本需要用尾随“L”表示,如
600851475143L
长文本需要用尾随“L”表示,如
600851475143L

我在您的代码中看到的是2147483647,而不是600851475143。这并不是说
number
应该是int而不是long…对不起,我正试图解决我的问题。“2147483647”是可以存储为整数的最大数字。我意识到,任何高于此数字的数字都会导致错误。我编辑了我的原始帖子,以避免将来人们可能会感到困惑。我在你的代码中看到2147483647,而不是600851475143。这并不是说
number
应该是int而不是long…对不起,我正试图解决我的问题。“2147483647”是可以存储为整数的最大数字。我意识到,任何高于此数字的数字都会导致错误。我编辑了我的原始帖子,以避免将来人们可能会产生混淆。不必是一个小的“l”,它也可以是一个大的l。我建议不要使用小写l,因为它通常看起来像1(1)。相反,使用大写L。是的,有时很难区分L和1。谢谢不必是一个小的“l”,它也可以是一个大的l。我建议不要使用小写的l,因为它通常看起来像1(1)。相反,使用大写L。是的,有时很难区分L和1。谢谢你,之后我做了进一步的研究。我的编译器只说了“错误:整数太大:6008514751143”。@user1390463和我说的一模一样。编译器已经准确地告诉了您错误所在。您的第一个错误是将消息告诉您的内容扭曲为“没有将变量“number”注册为长”。谢谢,之后我做了进一步的研究。我的编译器只说了“错误:整数太大:6008514751143”。@user1390463和我说的一模一样。编译器已经准确地告诉了您错误所在。您的第一个错误是将消息告诉您的内容扭曲为“没有将变量“number”注册为长”。谢谢Jim。这帮了大忙。谢谢你,吉姆。这帮了大忙。