java - 代码中的问题,需要一个短代码来解决问题
问题描述
第一件事,代码:
package com.company;
import java.util.Scanner;
public class index {
public static void main (String[] args)
{
System.out.println("enter any three digit number ");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
//let a= 2 7 4
int b= a%10;//4
int c=a/10;//27
int d= c%10;//7
int e=c/10;//2
//e=first num;
//d=middle num;
//b= last num ;
// for searching the greatest number
if (d>e && d>b )
System.out.printf(" the greatest number is %d%d%d",d,e,b);
else if(e>d && e>b )
System.out.printf(" the greatest number is %d%d%d",e,d,b);
else if (b>e && b>d )
System.out.printf(" the greatest number is %d%d%d",b,e,d);
// for the smallest number
else if(d<e && d<b && b>e)
System.out.printf(" the smallest number is %d%d%d",b,e,d);
else if(d<e && d<b && e>b)
System.out.printf(" the smallest number is %d%d%d",e,b,d);
else if (e<d && e<b && b>d)
System.out.printf(" the smallest number is %d%d%d",b,d,e);
else if(e<d && e<b && d>b)
System.out.printf(" the smallest number is %d%d%d",d,b,e);
else if (b<e && b<d && e>d)
System.out.printf(" the smallest number is %d%d%d",e,d,b);
else
System.out.printf(" the smallest number is %d%d%d",d,e,b);
}
}
现在的问题:
此代码用于将用户的数字作为任意三位数字的输入**并将其更改为最大数字和最小数字,例如:输入数字=274输出:最大数字=742最小数字=247
上面的代码给出了最大的数字,但不是最小的数字,而且代码很长,我的输出:
enter any three digit number 546 the greatest number is 654
所以请帮忙,代码中有任何错误,如果有任何短代码,请帮忙
解决方案
我可以建议一种完全不同的方法吗?
void printGreatestAndSmallest(int number) {
char[] digits = String.valueOf(number).toCharArray();
Arrays.sort(digits);
String smallest = new String(digits);
String greatest = new StringBuilder(smallest).reverse().toString();
System.out.println("Greatest number is " + greatest);
System.out.println("Smallest number is " + smallest);
}
这里发生的是,我们将数字转换为 a char[]
,可以使用 排序Arrays.sort(...)
。这样,最小的数字在前面,最大的在最后。使用构造函数将char[]
其转换回字符串String(char[])
。
那是最小值。最大的值是它的反面!StringBuilder
我们可以使用'sreverse()
方法得到最大的数。
请注意,此代码无法处理负数。
您当前方法的问题在于它包含大量重复,并且不太灵活;它被绑定到恰好三位数的输入。
为了解决您面临的问题,请else
从行中删除关键字else if(d<e && d<b && b>e)
。每个 if-elseif-else 语句只执行一个分支,但需要执行两个分支,一个用于最小数字,一个用于最大数字。
更远:
使用描述性变量名称。您的代码中有一条评论:
//e=first num; //d=middle num; //b= last num ;
但是你为什么不分别重命名
e
,d
和b
tofirstDigit
,middleDigit
andlastDigit
呢?遵循 Java 命名约定。变量名和方法名用驼峰写法,类名用 PascalCase。
class index
应该如此class Index
。还要确保重命名index.java
为Index.java
.您正在定义具有几乎相同功能的变量:在您的情况下
firstNum
,middleNum
和lastNum
. 它们都允许存储输入数字的特定数字。在这种情况下,您应该使用数组而不是单独的变量。循环适用于数组。如果您的代码使用 if-else 语句以某种方式迭代某个集合的所有可能排列,那可能不是最好的方法。
例如:
if (d>e && d>b ) else if(e>d && e>b ) else if (b>e && b>d )
你应该问自己:这些数字应该按特定顺序排列吗?这里的答案是肯定的,它们需要从低到高(从高到低)排序。在这种情况下,您可能想要对它们进行排序。
推荐阅读
- wpf - 绑定到 DataContext 失败
- laravel - Laravel 数据库查询生成器错误与表名
- reactjs - 为什么这里没有呈现“选定”?
- css - 设计内联 SVG 时是否需要 CDATA?
- java - 在 Java 中将字符串编码/解码为 BigInteger
- javascript - 如何在android中发送base64字符串?
- mysql - 我正在尝试在 mysql 中设置一个表,但不断收到错误并且无法找出修复它的正确方法
- curl - 为什么 www.amazon.com 呈现二进制数据?
- suitescript2.0 - 在 SuiteScript 中保存 NetSuite 自定义记录时获取 CUSTOM_RECORD_COLLISION
- java - 为什么Java在转换为PDF时会删除段落之间的空格?