Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java] Наибольшая цифра трехзначного числа


Автор: turtles 31.8.2011, 13:40
Здравствуйте! Подскажите по коду не могу разобраться где не правильно, у меня иногда в программе не правильно показывает наибольшию цифру трехзначного числа

Программа составлена по заданию:
Создать программу, выводящую на экран случайно
сгенерированное трёхзначное натуральное
число и его наибольшую цифру.

Код

public class Test {
   public static void main(String args []){
       final int min = 100;
        final int max = 999;
         int first;
         int second;
         int third;
          int value_max;
       int value = (int) (min + Math.random() * (max - min)) ;
       if(value > min && value < max) {
           first = (int) Math.floor(value / 100);
            second = (int) Math.floor((value - first * 100) / 10);
             third = (int) Math.floor(value - first * 100 - second * 10);
            System.out.println("Трехзначное число = "  + value);
               if(first > second){
                  value_max = first;
                    if(value_max < third){
                       value_max = third;
                 } else {value_max = second;}
 
          }else{ value_max = second;}
           if(value_max < third)
                       value_max = third;
            System.out.println("Первое число = "  + first);
            System.out.println("Второе число = "  + second);
            System.out.println("Третье число = "  + third);
            System.out.println("Максимальное число = "  + value_max);
 
             }
       }
}

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

Автор: LSD 31.8.2011, 13:48
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: priam220 31.8.2011, 16:47
преобразовать в char [] потом каждый символ в int. Сравнить. Кода будет заметно меньше и читаться будет.
Код

    public static void main(String[] args){
     char [] buf = new char [args[0].length()];
     String.valueOf(args[0]).getChars(0, args[0].length(), buf, 0);
     int minDigit = 0;
     for (char ch : buf){
      int x = Character.getNumericValue(ch);
      if (x > minDigit)
          minDigit = x; 
     }
     System.out.println(args[0]);
     System.out.println(minDigit);
    }

Автор: newbee 31.8.2011, 17:15
Странно, что тему перенесли, вроде как человек сам делает и просто просит помочь, а не сделать за него.

Тех, кто предлагает перегонять чила в char[], я предлагаю убивать без суда.

turtles, извини, мне лень разбирать нагромождения ява-кода, но суть такова. Берешь число, делишь его на десять. Остаток от деления - последняя цифра числа. Далее берешь оставшуюся целую часть от деления, опять делишь на десять, берешь остаток - это следующая цифра и т.д. Так делаешь в цикле, пока твое число не станет нулем. По ходу этого действа можешь запоминать максимальную цифру.

Код

x = 123456          <- N-значное число
max = -1            <- значение максимальной цифры

while x > 0 {
  digit = x % 10    <- взятие остатка от деления, получаем цифру
  x = x / 10        <- целочисленное деление, модифицируем число
  if max < digit {  <- поиск максимальной цифры
    max=digit
  }
}

Автор: priam220 31.8.2011, 17:27
Цитата(newbee @  31.8.2011,  17:15 Найти цитируемый пост)
Тех, кто предлагает перегонять чила в char[], я предлагаю убивать без суда.

за что ж ты меня хочешь убить то???  smile 

Автор: newbee 31.8.2011, 17:31
Цитата(priam220 @  31.8.2011,  18:27 Найти цитируемый пост)
за что ж ты меня хочешь убить то??? 
За быдлокод и глупость.

Автор: Silent 31.8.2011, 17:32
Самый простой вариант, раз у тебя всегда только три цифры - просто их выдрать через / и % (хотя newbee тоже дело говорит). Да и выбор максимального не через такой огород делается. Код, не проверялся:
Код

public class Test {
   public static void main(String args [])
   {
       final int min = 100;
       final int max = 999;
       int value_max;
       int value = (int) (min + Math.random() * (max - min)) ;
       if(value > min && value < max) {
           int first  = value / 100;
           int second = value % 100 / 10;
           int third  = value % 10;
           System.out.println("Трехзначное число = "  + value);
           System.out.println("Первое число = "  + first);
           System.out.println("Второе число = "  + second);
           System.out.println("Третье число = "  + third);
           value_max = Math.max(first, Math.max(second, third));
           System.out.println("Максимальное число = "  + value_max);
       }
   }
}

Автор: priam220 31.8.2011, 17:42
newbee,  судя по всему, ты великий кодер.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)