Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有更好的方法用Java编写? 有没有办法优化这段代码? 我只需要处理一个4位数字而已 我如何添加一个检查,以确保该数字是一个真正的正数和一个4位数字_Java - Fatal编程技术网

有没有更好的方法用Java编写? 有没有办法优化这段代码? 我只需要处理一个4位数字而已 我如何添加一个检查,以确保该数字是一个真正的正数和一个4位数字

有没有更好的方法用Java编写? 有没有办法优化这段代码? 我只需要处理一个4位数字而已 我如何添加一个检查,以确保该数字是一个真正的正数和一个4位数字,java,Java,我如何添加一个检查,以确保该数字是真的:第一个是正数,第二个是4位数字 我可以用两种方法解释4位非负整数 public class Palindrome { public static void main ( String [] args ) { Scanner scan = new Scanner ( System.in ) ; // new object named "scan" System.out.println ( "\nPlease enter

我如何添加一个检查,以确保该数字是真的:第一个是正数,第二个是4位数字

我可以用两种方法解释4位非负整数

public class Palindrome
{
   public static void main ( String [] args )
   {
       Scanner scan = new Scanner ( System.in ) ; // new object named "scan"
       System.out.println ( "\nPlease enter a number: "  ) ;
       int num = scan.nextInt () ; //store number into num

       if ( ( (num /1000)==(num%10) ) 
            && (    ( (num/10) %10 ) == ( (num/100)%10  )   ) ) 
           // num = 'abcd' : if (a=d) and (b=c) number is a palindrome.
            System.out.println ( "\nIs a Palindrome !"  ) ;
      else 
            System.out.println ( "\nNot a Palindrome !"  ) ;
   } //end of method main
} //end of class Palindrome
0
我如何添加一个检查,以确保该数字是真的:第一个是正数,第二个是4位数字

我可以用两种方法解释4位非负整数

public class Palindrome
{
   public static void main ( String [] args )
   {
       Scanner scan = new Scanner ( System.in ) ; // new object named "scan"
       System.out.println ( "\nPlease enter a number: "  ) ;
       int num = scan.nextInt () ; //store number into num

       if ( ( (num /1000)==(num%10) ) 
            && (    ( (num/10) %10 ) == ( (num/100)%10  )   ) ) 
           // num = 'abcd' : if (a=d) and (b=c) number is a palindrome.
            System.out.println ( "\nIs a Palindrome !"  ) ;
      else 
            System.out.println ( "\nNot a Palindrome !"  ) ;
   } //end of method main
} //end of class Palindrome

0更具可读性的方法是:

BufferedReader bufferedInput = new BufferedReader(System.in);
String line = bufferedInput.readLine();
if (line == null) { /* handle end of input case */ }
String number = line.trim();
// Check if its a palindrome
if (number.length() == 4
    && number.charAt(0) == number.charAt(3)
    && number.charAt(1) == number.charAt(2)) {
  // Finally check that the characters are all digits
  boolean isLegal = true;
  for (int i = (number.length() + 1) / 2; --i >= 0;) {
    char shouldBeADigit = number.charAt(i);
    if (!('0' <= shouldBeADigit && shouldBeADigit <= '9')) {
      isLegal = false;
      break;
    }
  }
  if (isLegal) {
    System.out.println(number + " is a palindrome");
  }
}
Scanner scan=新扫描仪(System.in);//名为“扫描”的新对象
System.out.println(“\n请输入一个数字:”);
int num=scan.nextInt()//将数字存储到num中
如果(num9999)
System.out.println(“仅接受4位正数”);
否则{
int help=num;
int rev=0;
而(帮助>0){
rev=rev*10+帮助%10;
帮助=帮助/10;
}
println(“是一个回文:+(rev==num));
}

更具可读性的方法是:

BufferedReader bufferedInput = new BufferedReader(System.in);
String line = bufferedInput.readLine();
if (line == null) { /* handle end of input case */ }
String number = line.trim();
// Check if its a palindrome
if (number.length() == 4
    && number.charAt(0) == number.charAt(3)
    && number.charAt(1) == number.charAt(2)) {
  // Finally check that the characters are all digits
  boolean isLegal = true;
  for (int i = (number.length() + 1) / 2; --i >= 0;) {
    char shouldBeADigit = number.charAt(i);
    if (!('0' <= shouldBeADigit && shouldBeADigit <= '9')) {
      isLegal = false;
      break;
    }
  }
  if (isLegal) {
    System.out.println(number + " is a palindrome");
  }
}
Scanner scan=新扫描仪(System.in);//名为“扫描”的新对象
System.out.println(“\n请输入一个数字:”);
int num=scan.nextInt()//将数字存储到num中
如果(num9999)
System.out.println(“仅接受4位正数”);
否则{
int help=num;
int rev=0;
而(帮助>0){
rev=rev*10+帮助%10;
帮助=帮助/10;
}
println(“是一个回文:+(rev==num));
}

检查输入是数字的位置

   Scanner scan = new Scanner ( System.in ) ; // new object named "scan"
   System.out.println ( "\nPlease enter a number: "  ) ;
   int num = scan.nextInt () ; //store number into num

   if(num<0 || num>9999)
       System.out.println("Only positive numbers with 4 digits are accepted.");
   else {
       int help=num;
       int rev=0;

       while (help > 0) {
           rev = rev * 10 + help %10;
           help = help / 10;
       }
       System.out.println("Is a palindrome: "+ (rev==num));
   }

检查输入是数字的位置

   Scanner scan = new Scanner ( System.in ) ; // new object named "scan"
   System.out.println ( "\nPlease enter a number: "  ) ;
   int num = scan.nextInt () ; //store number into num

   if(num<0 || num>9999)
       System.out.println("Only positive numbers with 4 digits are accepted.");
   else {
       int help=num;
       int rev=0;

       while (help > 0) {
           rev = rev * 10 + help %10;
           help = help / 10;
       }
       System.out.println("Is a palindrome: "+ (rev==num));
   }

将任务分成更小、更易于管理的部分,以便您解决。例如:

要检查字符串的长度是否为4:

public static boolean isNumeric(String str)
{
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}
要检查数字是否介于2个数字之间,请执行以下操作:

static boolean is4Digit(String p) {  
  return p.length()==4; 
} 

将任务分成更小、更易于管理的部分,以便您解决。例如:

要检查字符串的长度是否为4:

public static boolean isNumeric(String str)
{
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}
要检查数字是否介于2个数字之间,请执行以下操作:

static boolean is4Digit(String p) {  
  return p.length()==4; 
} 

isPalindrome(无字符串转换)的纯数学实现,比Chris更高效(尽管当然更不直观/可读):

public静态布尔值isAlindrome(整数){
如果(数字<0){
抛出新的IllegalArgumentException(“数字必须为正!”);
}
intpowerof10=(int)Math.pow(10,(int)Math.floor(Math.log10(number));
而(10的幂>=10){
数字-=10*的幂(数字%10);
如果(数字<0 | |数字>=10的幂){
返回false;
}
数目/=10;
功率10/=100;
}
返回true;
}

由于这是一个家庭作业问题,我将把解释这一问题的原因作为练习留给读者。

isPalindrome(无字符串转换)的纯数学实现,比Chris(当然更不直观/可读):

public静态布尔值isAlindrome(整数){
如果(数字<0){
抛出新的IllegalArgumentException(“数字必须为正!”);
}
intpowerof10=(int)Math.pow(10,(int)Math.floor(Math.log10(number));
而(10的幂>=10){
数字-=10*的幂(数字%10);
如果(数字<0 | |数字>=10的幂){
返回false;
}
数目/=10;
功率10/=100;
}
返回true;
}

由于这是一个家庭作业问题,我将把解释这一问题的原因作为练习留给读者。

您也可以使用带有捕获组和反向引用的正则表达式来完成。考虑此正则表达式捕获两个数字,然后捕获与前两个数字相反的两个数字:
public static boolean isPalindrome(int number) {
  if(number < 0){
    throw new IllegalArgumentException("number must be positive!");
  }
  int powerOf10 = (int)Math.pow(10, (int)Math.floor(Math.log10(number)));
  while(powerOf10 >= 10) {
    number -= powerOf10 * (number % 10);
    if(number < 0 || number >= powerOf10) {
      return false;
    }
    number /= 10;
    powerOf10 /= 100;
  }
  return true;
}

您还可以使用带有捕获组和反向引用的正则表达式来实现这一点。考虑此正则表达式捕获两个数字,然后捕获与前两个数字相反的两个数字:
public static boolean isPalindrome(int number) {
  if(number < 0){
    throw new IllegalArgumentException("number must be positive!");
  }
  int powerOf10 = (int)Math.pow(10, (int)Math.floor(Math.log10(number)));
  while(powerOf10 >= 10) {
    number -= powerOf10 * (number % 10);
    if(number < 0 || number >= powerOf10) {
      return false;
    }
    number /= 10;
    powerOf10 /= 100;
  }
  return true;
}


您不知道如何检查
int
是否为正数?谢谢您的练习。但是你试过什么?您的第一猜测是什么,我们可以提供什么具体帮助?所以这不是一个“做我的家庭作业”的网站。你也可以把你的号码转换成一个
字符串
,并对字符进行回文检查。(或者,首先将用户的输入保留为
字符串
)魔法数字的可怕用法是什么?只需检查字符串的反面是否与原始字符串相同……您可以摆脱所有额外的模运算。您不知道如何检查
int
是否为正数?谢谢您的练习。但是你试过什么?您的第一猜测是什么,我们可以提供什么具体帮助?所以这不是一个“做我的家庭作业”的网站。你也可以把你的号码转换成一个
字符串
,并对字符进行回文检查。(或者,首先将用户的输入保留为
字符串
)魔法数字的可怕用法是什么?只需检查字符串的反面是否与原始字符相同……您可以取消所有额外的模运算。如果您首先执行回文检查,则只需检查前n/2个字符(如果长度为奇数,则为n/2+1)因为根据回文的定义,其他回文也必须是数字。如果你使用
int
你想使用
double
@M,杰瑟普说得很对,但是如果它的长度是奇数,我想你只需要检查(n/2-1),因为中间的一个总是等于它本身。@Mike,您仍然需要检查中间,因为您正在检查它是否是数字。i、 如果你的回文测试是真的(假设它对字母的数字是不可知的),并且你没有检查中间的字符串“123Z321”将被认为是有效的。(这都是基于回文测试而不是一个数字)。然而,我们只能检查