Java'da Bir Sayının İkili Olup Olmadığını Anlamak


94

Java acemiyim. Bir sayının bir Çift olup olmadığını anlamaya çalışıyorum, bunun gibi bir şeye sahip:

if ( typeof ( items.elementAt(1) )== Double ) {
       sum.add( i, items.elementAt(1));
}

Biri bana bu sözdizimini nasıl yeniden düzenleyeceğimi söylerse çok memnun olurum.


Sadece ben miyim, yoksa typeof (nesne) C # 'da gerçek değil mi? Her zaman typeof (type) olduğunu düşündüm ... object o = new object(); Type t = typeof(o);derleyici hatası veriyor o is a variable but is used like a type. Bu sorunun adı yanlış yönlendiriyor ...
Dan Rayson

C # 'da, tüm nesnelerin Object#GetType()a döndüren bir yöntemi vardır Type. Bu daha sonra karşılaştırmak için kullanılabilir typeof(). Bu durumda, olur items.elementAt(1).GetType() == typeof(double).
2019, 00:29

Yanıtlar:


157

Bunu dene:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}

19
+1. Ayrıca gerçekten kontrol etmek istediğinizi düşünüyorum elementAt(0); Java'daki şeylerin çoğu sıfır tabanlıdır.
ChssPly76

17

Bu Google'ın ilk sorusu olduğu için JavaScript stili typeofalternatifini de buraya ekleyeceğim :

myObject.getClass().getName() // String

8

Düşünme daha yavaştır, ancak bunun bir Hayvan örneği değil, Köpek mi yoksa Kedi mi olduğunu bilmek istediğiniz bir durumda işe yarar. Yani şöyle bir şey yaparsınız:

if(null != items.elementAt(1) && items.elementAt(1).getClass().toString().equals("Cat"))
{
//do whatever with cat.. not any other instance of animal.. eg. hideClaws();
}

Yukarıdaki cevabın, boş kontrol kısmı gerekli olması dışında işe yaramayacağını söylememek.

Buna cevap vermenin başka bir yolu da jenerik kullanmaktır ve herhangi bir öğe öğesi olarak Double'a sahip olmanız garanti edilir.

List<Double> items = new ArrayList<Double>();

9
İnsanların olumsuz derecelendirme için nedenler koymayı öğrenmesini ister misiniz? Ben de java'da yeniyim ve bu cevapta neyin yanlış olduğunu görmek istiyorum, böylece denemek zorunda kalmayayım!
enrey

1
Sabit kodlanmış bir dizgeyle karşılaştırmaktan kaçınırdım, ya sınıf adı değişirse, instanceof da varsa, onu kullanırız.

@enrey Bunun instanceof'a göre avantajı nedir?
Charles Shiller

@CharlesShiller Avantajı, "Cat" dizesinin geç bağlanmasıdır.
Robino

2
+1 .getClass().toString()nedeniyle tek yön bağımlılık inejction için sınıfını içe olamaz çünkü. Teşekkür.
Hannes Schneidermayer

1

Bu görevi gerçekleştirmek için normal ifadeyi kullanın. Lütfen aşağıdaki koda bakın.

public static void main(String[] args) {
    try {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter your content: ");
        String data = reader.readLine();            
        boolean b1 = Pattern.matches("^\\d+$", data);
        boolean b2 = Pattern.matches("[0-9a-zA-Z([+-]?\\d*\\.+\\d*)]*", data); 
        boolean b3 = Pattern.matches("^([+-]?\\d*\\.+\\d*)$", data);
        if(b1) {
            System.out.println("It is integer.");
        } else if(b2) {
            System.out.println("It is String. ");
        } else if(b3) {
            System.out.println("It is Float. ");
        }           
    } catch (IOException ex) {
        Logger.getLogger(TypeOF.class.getName()).log(Level.SEVERE, null, ex);
    }
}

1
Harika bir örnek, 'TypeOF' btw nedir? son satırda.
Eddie Kumar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.