有没有更好的方法用Java编写? 有没有办法优化这段代码? 我只需要处理一个4位数字而已 我如何添加一个检查,以确保该数字是一个真正的正数和一个4位数字
我如何添加一个检查,以确保该数字是真的:第一个是正数,第二个是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
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”将被认为是有效的。(这都是基于回文测试而不是一个数字)。然而,我们只能检查