3 Вопрос: целочисленные манипуляции путем чтения его индекса

вопрос создан в Wed, May 8, 2019 12:00 AM

У меня есть целочисленное значение, например 4590897, я должен перетасовать это целое число таким образом, чтобы я получил вывод 4759980, это как вычисление первого и последнего номера и создание нового номера. целочисленное значение может быть любым.

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

public final class class2 {


public static void main(String[] args) {
    int a = 15670;
    StringBuilder s2 = new StringBuilder();
    String s1 = String.valueOf(a);
    char[] ch = s1.toCharArray();
    //System.out.println(ch.length);
    Outerloop:
    for(int i = 0; i <=ch.length-1;i++){
        //System.out.println(ch[i]);
        for(int j = ch.length-1; j >=0; j--){
            s2.append(ch[i]);
            s2.append(ch[j]);
            break;
        }

    }
    System.out.println(s2);
}

} р>

мне нужно перетасовать это целое число таким образом, чтобы я получил вывод 4759980

    
- 2
  1. Вы специально нацелены на 4759980 или любой случайный порядок цифр, которые изначально присутствовали?
    2019-05-08 16: 20: 19Z
  2. случайное число, число может варьироваться от [1-10000000]
    2019-05-08 16: 21: 24Z
  3. вы можете разбить массив на две части. возьмите одного персонажа из конца второй части и поместите его в альтернативные позиции в первой части.
    2019-05-08 16: 37: 47Z
  4. Пожалуйста, уточните свой вопрос. Теперь не понятно, что вы хотите. Сначала я думал, что вы хотите случайный порядок, но это может быть не так. Ты имеешь в виду, что хочешь чередовать первый и последний символы, а затем идти внутрь?
    2019-05-08 16: 42: 35Z
  5. да, именно это я и хочу
    2019-05-08 16: 43: 16Z
3 ответа                              3                         

Попробуйте это! Я сначала преобразовываю число в строку. Затем я добавляю первую и последнюю цифру, вторую и предыдущую цифру и т. Д. Затем я удостоверяюсь, что длина строки равна начальной (в случае чисел с нечетным числом цифр). р>

public int scramble(int number) {
    String numberString = Integer.toString(number);
    int numberLength = numberString.length();
    String result = "";
    for (int i = 0; i < (numberLength + 2) / 2; i++) {
        result += numberString.charAt(i);
        result += numberString.charAt(numberLength - i - 1);
    }
    //Making sure that the resulting string is the same length as the original
    //Initially, the result for a number with an odd number of digits, such as 12345
    //will be 152344. So you need to make sure the last digit is removed.
    result = result.substring(0, numberLength);
    return Integer.parseInt(result);
}
    
0
2019-05-08 16: 54: 44Z

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

public int scramble(int number) {

    //Convert the integer to an Array of strings where each string represents a digit
    String[] digits = Integer.toString(number).split("");

    //Add the individual digits to a list in random order, using a random position
    List<String> resultList = new ArrayList<>();
    for (String digit: digits) {
        int position = (int) (Math.random()*(resultList.size()));
        resultList.add(position, digit);
    }

    //Convert the list with digits in random order to a string
    String resultString ="";
    for (String digit: resultList) {
        resultString += digit;
    }

    //Convert the resulting string to an integer and return
    return Integer.parseInt(resultString);
}
    
0
2019-05-08 16: 32: 17Z
  1. Привет, спасибо за ваш ответ, я попытался запустить ваш код. он работает нормально, но не выдает желаемого результата, как будто ему передано значение 130. Ожидаемый результат: 103. output получил 301
    2019-05-08 16: 38: 42Z
  2. Вы ничего не должны ожидать, так как результат будет случайным. Так что либо 13, 31, 103, 130, 301 или 310.
    2019-05-08 16: 39: 38Z
  3. Пожалуйста, обновите свой вопрос. Было непонятно, что вы преследовали (иначе я бы не дал этот ответ).
    2019-05-08 16: 41: 32Z
  4. но условие состоит в том, что я должен перетасовать число таким образом, чтобы оно считывало значение с обоих концов и генерировало перемешанное число.
    2019-05-08 16: 42: 10Z

Возьмите два указателя, начало и конец. Итерация по строке и добавление символа от начала и конца к новой строкеING. Начальный и конечный приращения увеличиваются, пока начальный и конечный значения не будут одинаковыми.

public static void main(String args[]){
      int num = 45908971;
      System.out.println(alternate(num));      
   }


   private static int alternate(int num){
      String numStr = Integer.toString(num);
      int start = 0;
      int end = numStr.length()-1;
      StringBuffer newNum = new StringBuffer();
      while(start<=end) {
         newNum.append(numStr.charAt(start++)).append(numStr.charAt(end--));
      }
      return Integer.parseInt(new String(newNum.toString()));
   }
    
0
2019-05-08 17: 27: 00Z
источник размещен Вот