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

#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 вводят в заблуждение — большинство значений Java char вообще не имеют представлений 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 , затем объединяется в " " , что даст вам ожидаемый результат.