Kutubxonadan foydalanmasdan massiv uzunligini qanday hisoblash mumkin

Kecha men intervyuda paydo bo'ldim, intervyuchi menga Array sinfining length xususiyatidan foydalanmasdan massiv uzunligini hisoblash uchun kod yozishni aytdi.

Misol uchun -

char[] array=new Scanner(System.in).nextLine().toCharArray();
// i have to write a code for calculating length of this array
//I can use any operator but use of library is restricted

bu yerda berilgan barcha javoblar String kutubxonasidan foydalanilmoqda.


person Community    schedule 09.06.2015    source manba
comment
c kabi tilda biz while siklini sindirish uchun uni yangi qator belgisi \n bilan moslashtirgan holda ishlatamiz, lekin obyekt bilan qanday bajariladi.   -  person    schedule 09.06.2015
comment
ArrayIndexOutOfBounds istisnosini olmaguningizcha, sinab ko'ring.   -  person almightyGOSU    schedule 09.06.2015
comment
@Gosu. Ha, men ham buni sinab ko'rdim, lekin bu istisno orqali natijani aniqlash uchun yaxshi kodlash uslubi emas.   -  person    schedule 09.06.2015
comment
Umid qilamanki, buni qilishning yaxshiroq yo'li bor (sinab ko'ring/tutib ko'ring, albatta, ahmoqona ko'rinadi).   -  person almightyGOSU    schedule 09.06.2015
comment
@gosu Array klassi uzunligi xususiyatini qanday baholadi? chunki bu .class fayl src bilan mavjud emasmi?   -  person    schedule 09.06.2015
comment
Bunga murojaat qilishingiz mumkin: stackoverflow.com/ savollar/9297899/   -  person almightyGOSU    schedule 09.06.2015


Javoblar (4)


Yaxshiroq yechim bu usuldan foydalanish bo'lishi mumkin: java.lang.reflect.Array::getLength

Masalan:

import java.lang.reflect.Array;

public class ArrayLength {
    public static void main(String[] args) {
        char[] array = new char[]{'a', 'b', 'a', 'c'};
        System.err.println(Array.getLength(array));
    }

}
person gontard    schedule 09.06.2015
comment
Iltimos, menga aks ettirish API-dan qanday foydalanishni kodni ko'rsata olasizmi, chunki men aks ettirishdan bexabarman. - person ; 09.06.2015
comment
@dubey-theHarcourtians Men kichik bir misol qo'shdim - person gontard; 09.06.2015
comment
bu reflection API ni bilish yaxshi, lekin javoblar nuqtai nazaridan bu ma'nosiz, chunki APIlar cheklangan. - person ; 09.06.2015
comment
APIlar cheklanganmi? - person gontard; 09.06.2015

buni sinab ko'ring:

    char []c = {'a', 'b', 'c'};
    int i = 0;
    int l = 0;
    try{
    while(c[i++] != 0)
    {
        System.out.println(c[i-1]);
        l++;
    }
    }catch(Exception a)
    {};
    System.out.println(l);
person Diabolus    schedule 09.06.2015

Sharhlarda mening taklifimga ko'ra, bu yaxshi amaliyot emas.

import java.util.Scanner;

public class QuickTester {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.print("Enter something: ");
        char [] charArr = sc.nextLine().toCharArray();

        int i = 0;
        try {
            while(true) {
                char c = charArr[i++];
            }
        }
        catch (ArrayIndexOutOfBoundsException e) {

        }

        System.out.println("Length: " + (i-1));
    }
}

Chiqish:

Enter something: Banana
Length: 6
person almightyGOSU    schedule 09.06.2015
comment
Yomon amaliyot bu uzunlik xususiyatidan foydalanmaslikdir. Suhbatdoshning bu savoli ahmoqdir. - person gontard; 09.06.2015
comment
@gontard Ba'zan ular shunchaki ayyor savollar bilan chiqishni yaxshi ko'radilarmi? Aytmoqchimanki, uzunlik xususiyatisiz uzunlikni topish mumkin emas. - person almightyGOSU; 09.06.2015
comment
@gontard Interviewer hech qachon ahmoq bo'lmang, menimcha, u siz qaysi balandlikda o'ylashingiz mumkinligini bilishga harakat qilgan, fikr istiqbolni kodlash uchun kodni olish emas edi. Bu qutidan tashqarida fikrlash sinovi edi. - person ; 09.06.2015
comment
Men suhbatdoshni ahmoq deb aytmadim, faqat uning savoli... Menimcha, bunday savol yaxshi ishlab chiqaruvchini yollashga yordam bermaydi. - person gontard; 09.06.2015

person    schedule
comment
bolalarcha....ajoyib for each loop buning eng oddiy yechimi.juda kulgili.nega bu biz uchun hozircha qattiq emas, yaxshi ish odam. - person ; 09.06.2015
comment
Bu holda: length xususiyati bayt-kod darajasida ishlatiladi: arraylength - person gontard; 09.06.2015
comment
@gontard bunday ma'lumot berganingiz uchun tashakkur, lekin kutish kerak, chunki buni biz emas, balki jdk amalga oshiradi. - person ; 09.06.2015
comment
@dubey-theHarcourtians ha, menimcha. - person gontard; 09.06.2015