Проблема в коде и нужен короткий код для решения проблемы

#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;//4
     int c=a/10;//27
     int d= c;//7
     int e=c/10;//2
     //e=first num;
     //d=middle num;
     //b= last num ;
     
     // for searching the greatest number 
     
  if (d>e amp;amp; d>b  )
     System.out.printf(" the greatest number is %d%d%d",d,e,b);

  else if(e>d amp;amp; e>b )
      System.out.printf(" the greatest number is %d%d%d",e,d,b);

  else if (b>e amp;amp; b>d )
      System.out.printf(" the greatest number is %d%d%d",b,e,d);
  
    // for the smallest number 
  
  else if(d<e amp;amp; d<b amp;amp; b>e)
      System.out.printf(" the smallest number is %d%d%d",b,e,d);
  
  else if(d<e amp;amp; d<b amp;amp; e>b)
      System.out.printf(" the smallest number is %d%d%d",e,b,d);
  
  else if (e<d amp;amp; e<b amp;amp; b>d)
      System.out.printf(" the smallest number is %d%d%d",b,d,e);

  else if(e<d amp;amp; e<b amp;amp; d>b)
      System.out.printf(" the smallest number is %d%d%d",d,b,e);
  
  else if (b<e amp;amp; b<d amp;amp; 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
     

поэтому ,пожалуйста, помогите, любая ошибка в коде, и если есть какой-либо короткий код, пожалуйста, помогите

Комментарии:

1. Когда у вас есть if/else if/else цепочка, будет запущен только один из этих блоков, потому что else для этого и предназначен. Если вы хотите, чтобы запускалось более одного, перейдите else if на if .

2. не могли бы вы уточнить ?

3. Снимите 3-й else .

4. и это единственный способ , которым я могу это написать, любое предложение будет оценено по достоинству.:)

Ответ №1:

Я думаю, что проблема находится на пути решения. Как по мне, так лучше использовать какой-нибудь массив или список и отсортировать его. Что-то вроде того

 public static void main (String[] args)
{

    System.out.println("enter any three digit number ");
    Scanner sc=new Scanner(System.in);
    int a=sc.nextInt();

    int[] array = new int[3];
    for (int i = 0; i < 3; i  ) {
        array[i] = a % 10;
        a = a / 10;
    }
    Arrays.sort(array);

    int smallest = 0;
    int greatest = 0;
    for (int i = 0; i < 3; i  ) {
        smallest  = array[i];
        if (i != 2) {
            smallest *= 10;
        }
    }

    for (int i = 2; i > -1; i--) {
        greatest  = array[i];
        if (i != 0) {
            greatest *= 10;
        }
    }
    System.out.println(Arrays.toString(array));
    System.out.println(smallest);
    System.out.println(greatest);

}
 

Ответ №2:

Могу я предложить совершенно другой подход?

 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 reverse() метод С.

Обратите внимание, что этот код не может обрабатывать отрицательные числа.


Проблема с вашим текущим подходом заключается в том, что он содержит много повторений и не совсем гибок; он привязан к вводу ровно из трех цифр.

Чтобы устранить проблему, с которой вы столкнулись, удалите else ключевое слово из строки else if(d<e amp;amp; d<b amp;amp; b>e) . Каждый оператор if-elseif-else выполняет только одну ветвь, но вам нужно выполнить две ветви: одну для наименьшего числа и одну для наибольшего числа.

В дальнейшем:

  • Используйте описательные имена переменных. У вас есть комментарий в вашем коде:
     //e=first num;
    //d=middle num;
    //b= last num ;
     

    но почему бы вам не переименовать e , d и b в firstDigit , middleDigit и lastDigit соответственно?

  • Следуйте Соглашениям об именах Java. Имена переменных и методов записываются в camelCase, а имена классов-в PascalCase. Так class index и должно быть class Index . Также не забудьте переименовать index.java в Index.java .
  • Вы определяете переменные почти с той же функцией: в вашем случае firstNum , middleNum и lastNum . Все они позволяют хранить определенную цифру входного номера. В таком случае вы должны использовать массив вместо отдельных переменных. Циклы хорошо работают с массивами.
  • Если ваш код каким-то образом повторяет все возможные перестановки какой-либо коллекции, используя операторы if-else, это, вероятно, не лучший способ.

    Например:

     if (d>e amp;amp; d>b  )
    else if(e>d amp;amp; e>b )
    else if (b>e amp;amp; b>d )
     

    Вы должны спросить себя: должны ли эти цифры располагаться в определенном порядке? Ответ здесь-да, их нужно сортировать от низкого до высокого (и от высокого до низкого). В таком случае, вы, вероятно, захотите их отсортировать.

Комментарии:

1. спасибо за ваш ответ , на самом деле я новичок в java, и это был мой домашний вопрос ,я делаю это по методу , которому до сих пор учит учитель, кстати, я ценю вашу помощь, еще раз спасибо