І маленькі адзін сказаў «Перавярніце»

Ніжэй прыведзены код, я напісаў сёння, каб праверыць некаторыя біты я даведаўся. Гэта не так шмат, і не з'яўляецца уражлівым. Калі ласка, крытыкі і дайце мне ведаць, што я магу/павінен быў зрабіць па-іншаму, ці ўсё, што я мог зрабіць, каб палепшыць яго да гэтага часу.

package easy8;

import java.util.Scanner;

public class song99bottles {

public static void main(String[] args) {

// Declare a reference variable of type song99bottles - new object  
song99bottles go = new song99bottles();
// calls the method "queston" for object "go".
go.question();

}

public void question(){

    song99bottles start = new song99bottles();

    String answer;

    System.out.println("Would you like to hear a nursery rhyme?\nPlease enter yes or no:");
    Scanner input = new Scanner(System.in);
    answer = input.next();
    if(answer.equalsIgnoreCase("yes")){
        start.lyrics();
    } else{
        System.out.println("Bye");
    }

}



public void lyrics() {

    int peeps  = 10;
    String intro = "There were ";
    String intro2 = " in the bed and the little one said rollover";
    String fall = "\nSo they all rolled over and 1 fell out.";
    String end = "And the little said 'I'm lonely'.";

    while (peeps > 0){
        System.out.println( intro + peeps + intro2 + fall);
        peeps--;
        if (peeps == 1){
            System.out.println(end);
            return;
                        }
    }


}

}
8
Адсутнічае «адзін». «І маленькі <�я> адзін </я> сказаў:" Я самотны ".»
дададзена аўтар Ayla Scammell, крыніца
У адпаведнасці з гэтым відэа апошняй радок «Было адзін у ложку і трохі адзін сказаў:" Я самотны » youtube.com/v/TdDypyS_5zE%26start=130%26end=138%26version=3
дададзена аўтар Ayla Scammell, крыніца

6 адказы

  1. Class names should be PascalCase (song99bottles -> Song99Bottles)
  2. You should indent your code or you will end up with a long code and you don't understand the various { } pairs (and an horrible code!)

    public class song99bottles {
    public static void main(String[] args) {
    // Declare a reference variable of type song99bottles - new object  
    song99bottles go = new song99bottles();
    // calls the method "queston" for object "go".
    go.question();   
    }
    // [...]
    

    if you want to follow Code conventions, you code should look like this

    public class Song99Bottles {
    
        public static void main(String[] args) {
           //Declare a reference variable of type song99bottles - new object
            Song99Bottles go = new Song99Bottles();
           //calls the method "queston" for object "go".
            go.question();
        }
    
       //[...]
    

    Personally i follow the new-line style, but you will see with time you will get "your style".

    i hope you understand the concept. Read wikipedia page.

  3. You should give to your variables a more descriptive name, you should understand the scope of the variable by just reading the name. (song99bottles go = new song99bottles(); go? What is? a countdown? I could call it song (example))


Аб кодзе:

  1. Вы можаце стварыць два song99bottles аб'екты, то чаму? Адзін ўнутры Асноўны і адзін усярэдзіне пытанне() . Вы павінны перамясціць пытанне код ўнутры Асноўны , паколькі song99bottles клас павінен проста гуляць песню, галоўнае будзе клапаціцца, калі карыстальнік хоча ці не гуляць песня. Затым у Асноўны , проста выклічце go.lyrics ();

  2. Пра лірыцы() Код, см Ражэ адказ.

15
дададзена
імёны Клас павінен быць вярблюд выпадак - Я думаю, што вы маеце на ўвазе выпадак Pascal. song99bottles <�я> ёсць </я> вярблюд выпадак
дададзена аўтар CAdaker, крыніца
Java код Стыль патрабуюць, каб адтуліну распорка для складовага аператара ідзе ў канец лініі, а не на новай лініі. Ваш павінен быць Прыклад кода няправільна ....
дададзена аўтар rolfl, крыніца
Я разумею, і я працаваў з абодвума. Два заўвагі, хаця ... калі вы робіце «прыклад кода» ён павінен прытрымлівацца канвенцыі .... і з { на наступным радку выглядае як C #. Таксама, дарэчы, пусты радок перад тым аб'явамі метаду ;-). Ваш адказ добры, ён ужо мае сваю +1.
дададзена аўтар rolfl, крыніца
На самай справе, здаецца, што гэты водступ адсутнічае, таму што ўкладкі былі выкарыстаныя замест прабелаў. Я мяркую, што ўсё яшчэ можа быць фіксаваным (я збіраўся), але я не хачу, каб ануляваць свой адказ.
дададзена аўтар Jamal, крыніца
Я буду рэдагаваць з гэтым. Але я павінен прызнаць, я заўсёды прытрымлівацца «Новая лінія» стыль, я думаў, што код больш зразумелым.
дададзена аўтар Dinuk, крыніца
Аб пусты радку, да .. я думаю, што я выдаліў радок з памылкі ... Fixed дзякуй!
дададзена аўтар Dinuk, крыніца
Калі я writed адказу ў мяне былі праблемы з працай дазваляе блок кода з лічбавым спісам, так што я думаю, што я проста раблю некаторыя памылкі тут (прабелу праблему і г.д.) Сёння я паспрабую выправіць гэта сам ..
дададзена аўтар Dinuk, крыніца
Фіксаваны гэта таксама. Дзякуй, хлопцы!
дададзена аўтар Dinuk, крыніца
Можа таксама абнавіць мой адказ таксама ...
дададзена аўтар ArthurChamz, крыніца

Прымаючы адказ Роджэра ў якасці адпраўной кропкі, вы можаце таксама выкарыстоўваць толькі адзін радок у лірыцы() функцыі, таму што вы заўсёды выкарыстоўваць intro2 перад падаць , Калі вы выкарыстоўваеце адзін радок, вы захаваеце вылучэнне і канкатэнацыяй.

String intro = "There were ";
String fall  = " in the bed and the little one said rollover"
               + System.lineSeparator()
               + "So they all rolled over and 1 fell out.";
String end   = "And the little said 'I'm lonely'.";

for(int peeps = 10; peeps > 0; peeps--){
    System.out.println(intro + peeps + fall);
}
System.out.println(end);
10
дададзена
Вы можаце атрымаць паслядоўнасць перакладу радкі з сістэмнага аб'екта замест жорсткага кадавання сімвала новага радка ў сярэдзіне радка «падзенне».
дададзена аўтар Joe Morano, крыніца
... Я нават не ведаю, што сказаць ... Дзякуй.
дададзена аўтар ArthurChamz, крыніца
@atk Як гэта? Гэта свайго роду шматслоўна, але гэта можа выратаваць Кросплатформенную галаўны боль ці два.
дададзена аўтар ArthurChamz, крыніца

Ёсць цэлы шэраг удасканаленняў, якія вы можаце зрабіць, але выдаленне дэкларацыі для выглядае у тэкст() і якія змяняюць , а пятля на <�код > для пятля будзе добры старт:

for(int peeps=10;peeps>0;peeps--) {
    System.out.println( intro + peeps + intro2 + fall);            
}
System.out.println(end);
3
дададзена

Прапанова для кода

  1. Do not create Song99bottles twice, from question() you can call lyrics()
  2. Do not + strings, it creates an unbelievable overhead of strings in the stack (memory). Use a string formatter String.format("format %d", integer)
  3. Do not use comments unless the really matter. Comments are a sign of bad names and too few funtions, see this http://ptgmedia.pearsoncmg.com/images/9780132350884/samplepages/0132350882_Sample.pdf
3
дададзена

У дадатку да іншага добраму радзе, я бачу тут, я б перайменаваць ваш метад тэксту мае на ўвазе, што менавіта ён робіць. Напрыклад printLyrics() .

1
дададзена

Адзінае, што я магу думаць, каб дадаць да іншых з'яўляецца тое, што каментары ў <�асноўнай код /> метад залішнія.

// Declare a reference variable of type song99bottles - new object  
song99bottles go = new song99bottles();

Цалкам відавочна, што вы абвяшчаючы спасылку тут. Вы не дадаючы шмат, кажучы гэта.

// calls the method "queston" for object "go".
go.question();

Гэта горш. Гэта, як кажуць х = 10;//Усталёўвае й да 10 . Калі вы ўсталюеце на выхадзе некаторыя каментары, было б больш выгадна, каб пакінуць некаторыя ў іншых метадаў з вялікай колькасцю логікі залучанага як лірыцы метад.

0
дададзена