#java #arrays #io #java.util.scanner
#java #массивы #io #java.util.scanner
Вопрос:
public class ArrayIntro
{
public static void main(String[] args)
{
int[] a;
a=new int[10];
Scanner sc =new Scanner(System.in);
for(int i=0;i<10;i )
{
a[i]=sc.nextInt();
}
for(int e:a)
{
System.out.print(e ' ');
}
}
}
Ввод:1 2 3 4 5 6 7 8 9 10
Вывод: 33343536373839404142
Это означает, что к каждому числу добавлено 32
Комментарии:
1. Попробуйте
" "
вместо' '
—char
тип данных делает сумасшедшие вещи, когда вы добавляете его в numbers.
Ответ №1:
Просто попробуйте использовать приведенный ниже код.
Поскольку вы печатаете sout внутри цикла for , он выводит сумму числа и пробела ( ' '
). И пробел имеют значение ASCII 32, поэтому вы можете видеть каждый элемент с добавленным значением 32.
Для ASCII или Unicode вы можете перейти по этой ссылке, это поможет вам.
Просто вы вводите что-то вроде этого System.out.print(new Integer(' '));
, будет выведено 32.
Если вы хотите добавить только пробел, тогда используйте двойные кавычки. System.out.print(e " ");
.
Одинарная кавычка рассматривается как символ, а символ, добавленный с целым числом, будет суммироваться с их ASCII-кодом.
public static void main(String[] args)
{
int[] a;
a=new int[10];
Scanner sc =new Scanner(System.in);
for(int i=0;i<10;i )
{
a[i]=sc.nextInt();
}
for(int e:a)
{
System.out.print(e " ");
}
}
Комментарии:
1. Спасибо. Но почему он добавил их?
2. Эта строка ведет себя следующим образом
System.out.print(e ' ');
1 32 ,2 32 ,3 32 поскольку ASCII пробела равен 32.3. Вместо одинарных кавычек вы можете использовать двойные кавычки, подобные этой ` System.out.println(e » «);`
4. Я не чувствую, что этот ответ адекватно объясняет разницу между добавлением с
char
значениями и добавлением сString
значениями. Более того, частые упоминания ASCII вводят в заблуждение — большинство значений Javachar
вообще не имеют представлений ASCII, поэтому этот ответ к ним неприменим.5. @DawoodibnKareem его вопрос в том, почему он добавляет 32 с каждой цифрой. Такой простой ответ на это, например, когда вы заключаете пробел в одинарные кавычки, это считается символом пробела, а в java
space character (' ')
имеет 32 значения в ЮНИКОДЕ , и именно поэтому он добавляет 32 к каждому числу.
Ответ №2:
Проще говоря, ‘ ‘ — это символ в ASCII, и его значение равно 32. Итак, насколько я знаю, вы можете захотеть, чтобы он просто печатался напрямую, чтобы вы могли просто заменить ‘ ‘ на » «. Всегда помните, что одинарные кавычки предназначены для символов, а двойные — для строк.
Для вашего ответа вы можете просто сделать это: System.out.print(e " ");
Вместо этого: System.out.print(e ' ');
Ответ №3:
Короче говоря, чтобы исправить вашу программу, вам нужно использовать " "
(с двойными кавычками) вместо ' '
.
Проблема в том, что
оператор имеет два разных значения в Java.
- Если любой из операндов является a
String
, тоString
, то его нужно будет как-то преобразовать, и существуют некоторые правила, касающиеся того, как это сделать. - Если ни один из операндов не является a
String
, тоdouble
значения,float
values,long
values илиint
values, в зависимости от типов данных. Но если ониshort
,byte
илиchar
, они будут обрабатываться какint
. Это называется двоичным числовым продвижением и подробно объясняется в спецификации языка Java.
Теперь в Java для разделения char
литерала используются одинарные кавычки. Итак, когда вы пишете e ' '
, вы добавляете int
к char
. Это сложение — char
обрабатывается как int
, а операнды добавляются как числа. Число, соответствующее
, равно 32, поскольку это числовое значение в кодировке символов, используемой Java, которая является чем-то вроде UTF-16. Вопреки некоторым другим ответам на этой странице, это не ASCII.
Двойные кавычки используются для разделения String
литерала. Итак, если вы пишете e " "
, операндами являются int
и a String
. Это означает, что вы больше ничего не добавляете, а объединяете. int
Сначала преобразуется в String
, затем объединяется в " "
, что даст вам ожидаемый результат.