Удалить ведущие нули в массиве int

Попытайтесь объединить числа, удалив ведущие нули в массиве Int.

int[] array = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };
for (int i = 0; i < arr.length; i++) {
    String.format("%09d", array[i]);
}

for (int i = 0; i < arr.length; i++) {
    System.out.print(array[i]);
}

Желаемый результат:

405

Ваш Выход желаемый или тот, который вы сейчас получаете и не хотите? Кстати, это не рабочий пример ...

deHaar 09.10.2018 14:27

Ваш первый цикл ничего не делает (полезно).

Andy Turner 09.10.2018 14:28

Вы имеете в виду удалить нули из массива или распечатать массив без начальных нулей? Очень разные вопросы с разными решениями!

Stephen C 09.10.2018 14:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
2 389
7

Ответы 7

попробуйте это, если хотите распечатать:

int[] arr = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };
boolean isNotLeadingZero=false;
for (int i = 0; i < arr.length; i++) {
    if ((arr[i] != 0)  || isNotLeadingZero){
        System.out.print(arr[i]);
        isNotLeadingZero= true;
    }
}

выход

405

Вы можете сделать это, вставив логическое значение.

  boolean leadingZeroFinished=false;
  for (int i = 0; i < arr.length; i++) {
       if (array[i]!=0) {
           leadingZeroFinished=true;
       }
       if (leadingZeroFinished) {
          System.out.println(array[i])
       }
  }

Если вы также хотите удалить элемент, вам лучше использовать список

Вы можете использовать этот код:

boolean foundNonZero = false;
for (int i = 0; i < arr.length; i++) {
    foundNonZero |= (arr[i] != 0);
    if (foundNonZero) {
       System.out.print(array[i]);
    }
}

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

С Java 9+ (dropWhile отсутствовал в Java 8) вы можете сделать это следующим образом:

int[] array = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };
int[] withoutLeadingZeros = Arrays.stream(array).dropWhile(i -> i == 0).toArray();
System.out.println(Arrays.toString(withoutLeadingZeros)); // [4, 0, 5]

EDIT
Если результатом должен быть String:

String withoutLeadingZeros = Arrays.stream(array).dropWhile(i -> i == 0).collect(StringBuilder::new, StringBuilder::append, (l, r) -> l.append(r)).toString();
System.out.println(withoutLeadingZeros); // 405

EDIT
Если результатом должен быть int:

int number = Arrays.stream(array).reduce((l, r) -> l * 10 + r).getAsInt();
System.out.println(number); // 405

Я обновил свой ответ, показывающий, как получить результат String или int.

LuCio 09.10.2018 17:12
    int[] array = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };

    int i = 0;
    for (; i < array.length; i++) {
        if (array[i] > 0)
            break;
    }

    for (; i < array.length; i++) {
        System.out.print(array[i]);
    }

Это работает (компилируется)? Известен ли i во втором шлейфе? Я не запускал его, но похоже, что он просто распечатает массив как есть?

achAmháin 09.10.2018 14:48

это не будет компилироваться, сначала проверьте это.

The Scientific Method 09.10.2018 14:53

Да, это работает, не обязательно писать инициализацию внутри для блока, вы можете записать это следующим образом: i = 0; для (;;) {если (я <размер) перерыв; ... ... ... i ++; }

Mohammed Al-Tamimi 10.10.2018 13:42
import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] arr = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };

        int i,j;

        for (i = 0; i < arr.length; i++) {
            if (arr[i]!=0)
                break;
        }

        j=0;

        for(;i<arr.length;i++)
        {
            arr[j]=arr[i];
            j++;
        }



        for (i = 0; i < j; i++) {
            System.out.print(arr[i]);
        }
    }
}

Я сдвинул элементы, как вы просили удалить ведущие нули

Преобразуйте свой массив в число и распечатайте его:

    int[] array = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };
    int exp = 1;
    long total =0;
    for (int i = array.length -1; i >=0; i-- ) {
        total += array[i]*exp;
        exp *=10;
    }


    System.out.println(total);

Затем вы даже можете использовать результат для дальнейших вычислений.

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