Intro Java Fencepost/ цикла циклов условных испытаний

Я пытался ответить на эту проблему всю ночь, но я думаю, что мой мозг просто слишком жарен, чтобы ответить правильно. Итак, вопрос в точности [цитируется]: напишите метод highLow, который принимает целое число в качестве параметра и возвращает, имеет ли номер чередующиеся "высокие" и "низкие" цифры. От 0 до 4 - это "низкие" цифры, а от 5 до 9 - "высокие" цифры. Ваш метод должен возвращать true, если переданное число чередуется между цифрами "high" и "low", и false, если нет. Вы можете предположить, что переданное число является положительным. Если переданное число состоит из одной цифры, ваш метод должен вернуть true.

Примечание. Метод возвращает значение true, если число чередуется, начиная с цифры "high" или начиная с цифры "low". Важно то, что цифры чередуются. Например, highLow(9292) и highLow(2929) должны возвращать true.

Вот несколько примеров вызовов метода и их возвращаемых значений:

Возвращаемое значение возврата highLow(1918193) true highLow(7283) true highLow(3827) true highLow(9388) false highLow(895151) false highLow(707) true highLow(44) false highLow(45) true highLow(5) true Вы можете не использовать строку для решения этой проблемы

И это моя последняя попытка:

     public class Practeese {    
 public static void main(String[] args) {
  highLow(1918193); 
  highLow(7283);
  highLow(3827);;
  highLow(9388);    
  highLow(895151);  
  highLow(707);
  highLow(44);
  highLow(45);  
  highLow(5);
  }
  public static boolean highLow(int n) {

     // boolean isHigh = true;
    //  boolean isLow = true;
      boolean test = true;
      while (n > 0) { 
          boolean isHigh = true;
          boolean isLow = true;
              if (n % 10 >= 5) {

                  isHigh = true;
              } else if (n%10<=5) {

                  isLow = true;
              } else  {

                      return false;


              } 
              n = n / 10;

      if (n % 10 == 0 && (isLow!= isHigh)) {
        test = true;
      } else {
        test = false;
      }

  }
  return test;
 }
}

Я понимаю, что это вопрос стиля фехтования, но я просто могу решить его. Любая помощь приветствуется.

2 ответа

Вам нужно достичь false только один раз, и тогда вы сможете вернуться, потому что другие числа не будут иметь значения. Также вам нужно проверить, верен ли результат - по сравнению с предыдущим числом. Так что вы можете сделать это так:

public static boolean highLow(int n) {

          boolean isLastHigh= n % 10 >= 5 ; //First number check - we don't compare it to anything
          n=n/10;
// Start checking the next numbers and see if they are high-low-high-low
// if the condition is not met - return false and stop checking. Otherwise keep going
          while (n > 0) { 
                  if (n % 10 >= 5) {
                      if(isLastHigh)
                         return false; //Two highs in a row
                      isLastHigh = true;
                  } else {
                      if(!isLastHigh)
                         return false; //Two lows in a row
                      isLastHigh = false;
                  } 
                  n = n / 10;
      }
  return true; //We never returned false so all numbers until now have been high-low-high and the result is true

     }

Это сработало для меня

public class Practeese {    
 public static void main(String[] args) {
  System.out.println(highLow(1918193)); 
  System.out.println(highLow(7283));
  System.out.println(highLow(3827));
  System.out.println(highLow(9388));
  System.out.println(highLow(895151));
  System.out.println(highLow(707));
  System.out.println(highLow(44));
  System.out.println(highLow(45));  
  System.out.println(highLow(5));
  }
  public static boolean highLow(int n) {

      boolean high = false;
      boolean low = false;

      while (n > 0) { 

        if(n % 10 >= 5) {

            if(high) {
                 return false;

            } else {

                low = false;
                high = true;
            }

        } else {

            if(low) {
                return false;

            } else {

                high = false;
                low = true;
            }
        }

        n = n / 10;

      }

      return true;
 }

}

Выходные данные: true true true false false true false false true true

Другие вопросы по тегам