首页 > 解决方案 > 代码中的问题,需要一个短代码来解决问题

问题描述

第一件事,代码:

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);
}
}

现在的问题:

  1. 此代码用于将用户的数字作为任意三位数字的输入**并将其更改为最大数字和最小数字,例如:输入数字=274输出:最大数字=742最小数字=247

  2. 上面的代码给出了最大的数字,但不是最小的数字,而且代码很长,我的输出:

     enter any three digit number 
     546
     the greatest number is 654
    

所以请帮忙,代码中有任何错误,如果有任何短代码,请帮忙

标签: java

解决方案


我可以建议一种完全不同的方法吗?

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,dbto firstDigit, middleDigitandlastDigit呢?

  • 遵循 Java 命名约定。变量名和方法名用驼峰写法,类名用 PascalCase。class index应该如此class Index。还要确保重命名index.javaIndex.java.

  • 您正在定义具有几乎相同功能的变量:在您的情况下firstNum,middleNumlastNum. 它们都允许存储输入数字的特定数字。在这种情况下,您应该使用数组而不是单独的变量。循环适用于数组。

  • 如果您的代码使用 if-else 语句以某种方式迭代某个集合的所有可能排列,那可能不是最好的方法。

    例如:

    if (d>e && d>b  )
    else if(e>d && e>b )
    else if (b>e && b>d )
    

    你应该问自己:这些数字应该按特定顺序排列吗?这里的答案是肯定的,它们需要从低到高(从高到低)排序。在这种情况下,您可能想要对它们进行排序。


推荐阅读