#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) в качестве первого добавляемого числа, и вы можете создать новый массив с абсолютным значением всех оставшихся значений исходного массива. Затем добавляйте, постепенно принимая максимальное неиспользуемое значение массива.