Как распечатать отрицательное число, представленное массивом

#java #arrays #stringbuilder

#java #массивы #stringbuilder

Вопрос:

Я только начинаю изучать Java, и я хочу попробовать представить большие отрицательные числа с помощью массивов.

Допустим, у меня есть массив

 [-2, 0, -5] and this represents the number -502
 

Я пытался использовать StringBuilder, но он выводит

 -50-2
 

Это мой код на данный момент. Есть ли способ сделать так, чтобы я мог добавить первое отрицательное значение, а затем пропустить остальные отрицательные значения при создании новой строки?

     StringBuilder sb = new StringBuilder();

    for(int x = arr.length-1; x>=0; x--){
        sb.append(arr[x]);
    }
    String check = sb.toString();
    System.out.println(check);
 

Комментарии:

1. Как [-2, 0, -5] представляет -502 ? В чем смысл - ?

2. почему [-2, 0, -5] представляет -502? как насчет [-2, 0, 5] и [2, 0, -5]?

3. Я просто строю его из последнего -> первого

4. Если вы построите его от последнего к первому, может быть, это должно быть [2,0, -5]?

5. я вижу, ну, как сказал @jhamon, вы должны просто оставить знак на последнем или добавить абсолютное значение и добавить отрицательный знак ТОГДА и только тогда, когда вы используете этот метод только для отображения только отрицательных значений. (так как это добавит отрицательный знак и к положительным значениям).

Ответ №1:

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

 StringBuilder sb = new StringBuilder();
sb.append(arr[length-1]);

for (int x = arr.length-2; x>=0; x--) {
    sb.append(Math.abs(arr[x]));
}
String check = sb.toString();
System.out.println(check);
 

Ответ №2:

Добавьте минус в начале строки и используйте Math.abs(arr[x]) при добавлении.

Это должно выглядеть примерно так:

 StringBuilder sb = new StringBuilder();

sb.append("-");
for(int x = arr.length-1; x>=0; x--){
   sb.append(Math.abs(arr[x]));
}
String check = sb.toString();
 

Ответ №3:

Да, конечно. Ваш вопрос неясен, но я думаю, что это делает то, что вы хотите:

 if(x == arr.length-1 || x > 0)
    sb.append(arr[x]);
else
    sb.append(-arr[x]);
 

- отменяет себя. -(-5) всего 5.

В качестве альтернативы: (это может быть или не быть проще для понимания для вас)

 if(x == arr.length-1)
    sb.append(arr[x]);
else
    sb.append(Math.abs(arr[x]));
 

Math.abs это метод, который гарантирует, что число не является отрицательным — если заданное вами число является положительным или нулевым, оно возвращает его. Если заданное вами число отрицательное, оно возвращает положительную версию.

В качестве альтернативы:

 sb.append((x == arr.length - 1) ? arr[x] : Math.abs(arr[x]));
 

Это просто «сокращение» для предыдущего предложения.

Ответ №4:

попробуйте это

           StringBuilder sb = new StringBuilder();
      Integer[] arr = new Integer[10];        
      if(arr[arr.length-1]<0)
          sb.append("-");
      for(int x = arr.length-1; x>=0; x--){
            sb.append(Math.abs(arr[x]));              
      }
      String check = sb.toString();
      System.out.println(check);
 

Ответ №5:

Чтобы «пропустить оставшиеся отрицательные значения» в этом случае, возьмите первое отрицательное число «как есть» и возьмите абсолютное значение оставшихся отрицательных чисел, прежде чем добавлять их. Используйте вызов Math.abs(arr[x]) для получения абсолютного значения. Таким образом, конструктор строк посмотрит на ваш массив, примет значение -5, а затем увидит «02», поскольку он добавляет следующие целые числа.

Теперь, если требуется, чтобы вы хотели наибольшее отрицательное число с возможно более длинным массивом, скажем [-5, -3, 2, 6], и вы хотите, чтобы оно возвращало -5632… Начните с того, что возьмите наименьшее отрицательное число (-5) в качестве первого добавляемого числа, и вы можете создать новый массив с абсолютным значением всех оставшихся значений исходного массива. Затем добавляйте, постепенно принимая максимальное неиспользуемое значение массива.