2011-12-28 2 views
-1

Дано:Значения данных и типы

int x = 10; 
double d = -3.0; 
boolean f = false; 

1.

Почему следующие остаются двойной после того, как она отлита как межд ... Для второй также, почему это делает выход с плавающей точкой, когда определяется как долго ?:

(int) d/2.0 
(long) d * 2f 

2.

Почему первая из следующих строк напечатает строку (?), А вторая - номер?

"2" + x + 2 
"3" + 3 * x 

Но тогда возникает ошибка со следующим:

"5" + i + 2 

3.

Кроме того, с follwing, что на самом деле происходит и что в результате?

d++ + d 

4.

Когда Math.round используется, почему он преобразует следующий двойной в обращении, или они то же самое?

Math.round(x/d) 
+0

Что 'i'? ... –

+0

Это множество не связанных между собой вопросов, которые не делает его отличным подходит для SO ... –

+0

Первый и второй - это приоритет оператора (http://introcs.cs.princeton.edu/java/11precedence/), третий отсутствующий контекст (что такое 'i'?) и последний : просто попробуйте. –

ответ

1

Почему следующие два символа остаются двойными после того, как они были выбраны как int ... Для второго также почему он выводит float при определении как long?:

(int) d/2.0 
(long) d * 2f 

Поскольку приоритет литой (int) оператора выше, что / и * операторы. Вы должны прочитать это так:

((int) d)/2.0 

((long) d) * 2f 

Почему первый из следующей печати строки, а второй ряд (?)?

"2" + x + 2 
"3" + 3 * x 

Я думаю, что это строка в обоих casesm вы должны "читать" эти выражения, как это:

("2" + x) + 2 
"3" + (3 * x) 

Но тогда возникает ошибка со следующим:

"5" + i + 2 

Какая ошибка?

Кроме того, с учетом того, что на самом деле происходит и каков результат?

d++ + d 

Это последовательность действий:

  1. TMP = д
  2. D = D + 1
  3. возврата TMP + D

Когда математики .round используется, почему он преобразует следующий двойной в float, или они одно и то же?

Math.round(x/d) 

Он преобразует в long, потому что возвращение типа Math.round(double) является long

1
(int) d/2.0 
(long) d * 2f 

Вы до сих пор с плавающей точкой математики, то есть один операнд еще дважды/поплавок и, таким образом, результат является двойным/поплавком.

"2" + x + 2 
"3" + 3 * x 

Первые будет просто конкатенации, то есть типа выражения является String и, таким образом, все операнды преобразуются в строку. Для x=1 вы получите "212".

Во-вторых, с учетом оператора precendence, т.е. * вычисляется до + и, таким образом, выражение 3 * x является операцией целым числом математике, результат которого затем будет преобразован в строку с помощью "3" + result.

"5" + i + 2 

Ошибка указанно в вашем коде, разместите исключение. Скорее всего, i не определено.

d++ + d 

Посмотрите на операторы приоритета операторов и операторов приращения. x++ вернет значение x, а затем увеличит его. Затем к новому значению добавится предыдущее значение x. Вы можете думать, что это похоже на x + (x+1).

Когда используется Math.round, почему он конвертирует следующий двойной в поплавок или они то же самое?

Math.round (x/d)

Нет конверсии, только перегруженный метод (один берет двойной и один принимает поплавок). В основном float имеет меньшую точность, чем double, но оба являются числами с плавающей запятой.

2

1.

Это:

(int) d/2.0 

так же, как это:

((int) d)/2.0 

Возможно, вы имели в виду это?

(int)(d/2.0) 

2.

Они оба "печать" строки (при условии, что вы говорите об использовании их в качестве аргумента System.out.println).

Это:

"2" + x + 2 
"3" + 3 * x 

такие же, как эти:

("2" + x) + 2 
"3" + (3 * x) 

, которые являются такими же, как они (предполагая, что x = 10):

("2" + 10) + 2 
"3" + 30 

, которые являются такими же, как они :

"2102" 
"330" 

3.

Я не могу вспомнить, что должно произойти здесь. Но вам никогда не нужно/хотеть писать такой код, так что это не имеет значения!

4.

Тип возврата Math.round является целочисленным типом, не является типом с плавающей точкой.

0

Слишком много вопросов в одном.

  • Вы создадите операнд, а не выражение и типы.
  • Что они на самом деле печатают и как вы различаете их типы? Отъезд Java operator precedence.
  • Потому что нет i.
  • Вы можете распечатать результат.

Conversions and Promotions JLS section также может быть полезен; на многие из ваших вопросов ответили.

Смежные вопросы