#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);
}
}
теперь проблема:
- этот код предназначен для того , чтобы взять номер пользователя в качестве входного **любого трехзначного числа ** и изменить его на наибольшее число и наименьшее число, например: входное число =274 вывод : наибольшее число=742 наименьшее число=247
- приведенный выше код дает наибольшее число , но не наименьшее число, и код очень длинный, мой вывод:
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, и это был мой домашний вопрос ,я делаю это по методу , которому до сих пор учит учитель, кстати, я ценю вашу помощь, еще раз спасибо