Jadval usulida muammolar mavjud

10.0 dan 13.0 gacha raqamlarning kvadratlarini ifodalovchi suzuvchi nuqta qiymatlari majmuasini tuzadigan createDoubles nomli usulni, har ikkala chegarani ham qo'shib hisoblaganda 0,5ni kiriting. Usul parametrlari yo'q va juftliklar majmuasini qaytaradi. Ushbu qatorda to'liq 7 raqam mavjud. Men nonni harakat qilmayman, hech narsa ishlamaydi. Rahmat!

public static double[] createDoubles(){
    double[] dArray= new double[7];
    double[] squareArray= new double[dArray.length];

    for(int i= 0; i< dArray.length-1; i+=0.5){

        squareArray[i]= dArray[i]* dArray[i];
    }
    return squareArray;
}
1
Nima uchun usulda ikkita massiv yaratasiz? Bundan tashqari, dArray hosil qilasiz, lekin undagi har qanday qadriyatlarni joylashtira olmaysiz, keyin uninitialized bo'lmagan qadriyatlarga murojaat qiling. Va sizning pastadir chiqdi qator 100 qiymatiga teng bo'lgan talabni qondirmaydi.
qo'shib qo'ydi muallif FredK, manba
Sizning kodingiz ishlab chiqarilayotgan mahsulotning chiqishini ta'minlay olasizmi?
qo'shib qo'ydi muallif Mark Stewart, manba
Hech narsa ishlab chiqarmaydi
qo'shib qo'ydi muallif J.Doe, manba
Ruxsat etilgan chiqadigan chiqindi endi: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
qo'shib qo'ydi muallif J.Doe, manba

7 javoblar

Shu kabi bir narsa ishlaydi. Idea, sizning loopingiz kutganidek, qator ko'rsatkichlari 1 dan oshiq va 0,5 emas.

public static double[] createDoubles(){
    double[] dArray= {10.0,10.5,11.0,11.5,12.0,12.5,13.0};
    double[] squareArray= new double[dArray.length];
    for(int i= 0; i< dArray.length; i++){
        squareArray[i]= dArray[i]* dArray[i];
    }
    for(double f: squareArray)
        System.out.println(f);
    return squareArray;
}
1
qo'shib qo'ydi

Quyidagi yo'lni sinab ko'ring:

public static double[] createDoubles(){
  double[] squareArray= new double[7];
  double number = 10.0;
  int i=0;
  while(number <= 13.0) {
     squareArray[i] = number*number;
     number = number + 0.5;
     i++; 
  }
}
return squareArray;
1
qo'shib qo'ydi
Arzimaydi. Mening javobim sizning savolingizga to'liq javob beradimi?
qo'shib qo'ydi muallif VHS, manba
OMG sizga katta rahmat!
qo'shib qo'ydi muallif J.Doe, manba

Agar siz i bilan 0,5 ga oshirilsa, qanday qilib katalog indeksini loopda ishlashini kutmoqdasiz? Kodni ikki marta tekshirib ko'rsangiz bo'ladimi?

1
qo'shib qo'ydi

squareArray[integer+double] is not a valid array index. Array index are always integer.

1
qo'shib qo'ydi

Buning bir usuli bor, lekin o'qituvchining xohlagan narsa emas:

public static double[] createDoubles() {
   double[] answer = {10.0, 10.5, 11.0, 11.5, 12.0, 12.5, 13.0 );
   //Actually, the above values should be 100,m ... 169.
   //but I'm too laze to do the math
   return answer;
}

Ichki indeksni noaniq qiymat bilan oshirishni yaxshi deb bo'lmaydi. Siz usulingizni 0,1 dan 0,5 ga oshganligi uchun sinab ko'rsangiz ajablanishingiz mumkin.

0
qo'shib qo'ydi

Bu kod ishlamayotganligi, lekin ishlamayotganligi java kodi i + = 0.5 ni i + = 0 ga 0 ga teng bo'lsa, sizning loopingiz hech qachon chiqmasligi va sizning kodingiz hech narsa qilmasligi kerak. Kodning ushbu qismini tuzatish uchun i + = 0.5 kodini i + = 1 ga o'zgartiring. Biroq, siz kvadrat majmuasida hech narsa e'lon qilmaguningizcha, qaytib kelgan natijalar majmuasi 0sdan boshqa narsa emas. D majmuasida xohlagan narsani belgilash va bu qiymatlarni birgalikda qaytarish kerakli qatorda qiymat yaratish uchun belgilash. Yoki, har bir qiymatni qatorga qo'yib qo'ying:

for(int i= 0; i<= dArray.length-1; i+=1){
   squareArray[i]= Math.pow(10 + (0.5*i), 2);
}
0
qo'shib qo'ydi

Quyidagi namoyishlarni ko'rishingiz mumkin:

int i = 0;
i = i + 0.5;

Men doimo 0 bo'ladi. Demak, siz uni chaqirganingizda usulingizni to'xtata olmaydi.

0
qo'shib qo'ydi