การหาว่าตัวเลขเป็น Double ใน Java หรือไม่


94

ฉันเป็นมือใหม่ Java ฉันกำลังพยายามหาว่าตัวเลขเป็นสองเท่าหรือไม่โดยมีอะไรแบบนี้:

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

จะขอบคุณถ้ามีคนบอกวิธีจัดเรียงไวยากรณ์ใหม่เพื่อให้ทำงานได้อย่างถูกต้อง


เป็นแค่ฉันเองหรือ typeof (object) ไม่จริงใน C #? ฉันมักจะคิดว่ามันเป็น typeof (พิมพ์) ... โยนข้อผิดพลาดคอมไพเลอร์กล่าวว่าobject o = new object(); Type t = typeof(o); o is a variable but is used like a typeชื่อของคำถามนี้ทำให้เข้าใจผิด ...
Dan Rayson

ใน c # ออบเจ็กต์ทั้งหมดมีObject#GetType()เมธอดซึ่งส่งคืน a Type. typeof()ที่สามารถนำมาใช้ในการเปรียบเทียบกับ items.elementAt(1).GetType() == typeof(double)ในกรณีนี้ก็จะเป็น
Frontear

คำตอบ:


157

ลองสิ่งนี้:

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

19
+1. ฉันยังคิดว่าคุณจริงต้องการตรวจสอบelementAt(0); เนื้อหาส่วนใหญ่ใน Java ใช้ศูนย์
ChssPly76

17

เนื่องจากนี่เป็นคำถามแรกจาก Google ฉันจะเพิ่มtypeofทางเลือกสไตล์ JavaScript ที่นี่ด้วย:

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

8

การสะท้อนกลับช้าลง แต่ใช้ได้กับสถานการณ์เมื่อคุณต้องการทราบว่าเป็นประเภทสุนัขหรือแมวไม่ใช่ตัวอย่างของสัตว์ คุณจะทำสิ่งที่ชอบ:

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

การไม่บอกว่าคำตอบข้างต้นใช้ไม่ได้ผลยกเว้นส่วนการตรวจสอบค่าว่างเป็นสิ่งที่จำเป็น

อีกวิธีหนึ่งในการตอบคำถามนั่นคือการใช้ยาสามัญและคุณรับประกันได้ว่าจะมี Double เป็นองค์ประกอบของรายการ

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

9
คุณช่วยให้คนอื่นเรียนรู้ที่จะใส่เหตุผลในการให้คะแนนเชิงลบ ฉันเป็นคนใหม่ใน java ด้วยและฉันอยากเห็นว่ามีอะไรผิดปกติกับคำตอบนี้ดังนั้นฉันจึงไม่ต้องลอง!
enrey

1
ฉันจะหลีกเลี่ยงการเปรียบเทียบกับสตริงที่เข้ารหัสยากถ้าชื่อคลาสเปลี่ยนไปอินสแตนซ์ก็มีอยู่ด้วยดังนั้นเราจึงใช้สิ่งนั้น

@enrey ข้อดีของอินสแตนซ์นี้คืออะไร?
Charles Shiller

@CharlesShiller ข้อดีคือการผูกเชือก "Cat" ในช่วงปลาย
Robino

2
+1 .getClass().toString()เนื่องจากฉันไม่สามารถนำเข้าคลาสได้เนื่องจากความไม่สอดคล้องกันทางเดียว ขอบคุณ.
Hannes Schneidermayer

1

ใช้นิพจน์ทั่วไปเพื่อบรรลุภารกิจนี้ โปรดดูรหัสด้านล่าง

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
ตัวอย่างที่ดี btw 'TypeOF' คืออะไร? ในบรรทัดสุดท้าย
Eddie Kumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.