не печатать достаточно значительных цифр (java) [duplicate]

CharSequence - interface. Поэтому, даже если SomeClass не реализует CharSequence, было бы вполне возможно создать класс

class SubClass extends SomeClass implements CharSequence

. Поэтому вы можете написать

SomeClass c = getCharSequence();

, потому что предполагаемый тип X является типом пересечения SomeClass & CharSequence.

Это немного странно в случае Integer, потому что Integer является окончательным, но final не играет никакой роли в этих правилах. Например, вы можете написать


. С другой стороны, String не является interface, поэтому было бы невозможно расширить SomeClass, чтобы получить подтип String, потому что java не поддерживает множественное наследование для классов.

С примером List вам нужно помнить, что дженерики не являются ни ковариантными, ни контравариантными. Это означает, что если X является подтипом Y, List не является ни подтипом, ни супертипом List. Поскольку Integer не реализует CharSequence, вы не можете использовать List в своем методе doCharSequence.

Вы можете, однако, получить это, чтобы скомпилировать

 void foo(List list) {
    doCharSequence(list);
}  

Если у вас есть метод, который возвращает a List следующим образом:

static  List foo() 

вы можете сделать

List list = foo();

Опять же, это потому, что выведенные type Integer & CharSequence, и это подтип Integer.

Типы пересечений возникают неявно, когда вы указываете несколько границ (например, ).

Для получения дополнительной информации здесь является частью JLS, где объясняется, как работают ограничения типов. Вы можете включить несколько интерфейсов, например


, но только первая оценка может быть неинтерфейсом.

4
задан chaitanya 2 May 2013 в 10:31
поделиться

7 ответов

i1/i2 будет равно 0. Так как i1 и i2 являются целыми числами.

Если у вас есть int1/int2, если ответ не является идеальным целым числом, цифры после десятичной точки будут удалены. В вашем случае 2/5 равно 0,4, поэтому вы получите 0.

Вы можете использовать i1 или i2 для double (другое будет неявно преобразовано)

double d = 3 + (double)i1/i2 +2;

11
ответ дан Maroun 20 August 2018 в 12:27
поделиться
int i1 =2;
int i2=5;
double d = 3 + (double)i1/(double)i2 +2;

, если i1 / i2 будет дробным, тогда double поможет ему быть во фракции вместо int. так что теперь вы получите результат по своему усмотрению. или вы также можете использовать следующий код double d = 3+ (double) i1 / i2 + 2; В этой строке i1 преобразуется в double, который будет разделен на i2, и результат будет в два раза, поэтому результат будет равен 5.4

1
ответ дан Amit Ranjan 20 August 2018 в 12:27
поделиться

Эта ссылка содержит информацию о преобразовании типа данных, как неявного, так и явного типа.

Для точного ответа на вопрос будет:

double d = 3 + (double)i1/i2 + 2
1
ответ дан Madhusudan Joshi 20 August 2018 в 12:27
поделиться

i1/i2 будет 0, потому что оба i1 и 12 являются целыми числами.

, если вы добавили i1 или i2 в double, тогда он даст желаемый результат.

double d = 3 + (double)i1/i2 +2;
2
ответ дан NullPointer 20 August 2018 в 12:27
поделиться

Поскольку i1 = 2 и i2 = 5 являются целыми типами, и когда вы делите (2/5) их, оно дает целочисленное значение (0), потому что дробная часть (.4) отбрасывается. Итак, положим (double) i1 / i2 на уравнение.

0
ответ дан Parmanand 20 August 2018 в 12:27
поделиться

Эта строка выполняется по частям:

double d = 3 + i1/i2 +2;

double d = 3 + (i1/i2) +2;
double d = 3 + ((int)2/(int)3) +2;
double d = 3 + ((int)0) +2;
double d = (int)5;
double d = 5;

Двойной просто означает, что ответ будет передан в double, он не будет иметь никакого эффекта до вычисления ответа. Вы должны написать

double d = 3d + (double)i1/i2 +2d; //having one double in each "part" of the calculation will force it to use double maths, 3d and 2d are optional
3
ответ дан Richard Tingle 20 August 2018 в 12:27
поделиться

i1/i2 при преобразовании в int дает 0. ie. почему вы получаете 5.0. Попробуйте следующее:

 public static void main(String args[])
    {
            int i1 =2;
            int i2=5;
            double d = 3 + (double)i1/(double)i2 +2;
            System.out.println(d);
        }
5
ответ дан Vineet Singla 20 August 2018 в 12:27
поделиться
  • 1
    +1. Но вы можете использовать только один из них, другой будет неявно преобразован. – Maroun 2 May 2013 в 10:42
  • 2
    правильно, я просто добавляю его для повышения удобочитаемости и понимания. – Vineet Singla 2 May 2013 в 10:45
Другие вопросы по тегам:

Похожие вопросы: