2014-11-27 3 views
-1

Я сталкиваюсь с трудностями, с этим:buildingjavaprograms Параметр Mystery

public class MisterySoda { 
public static void main(String[] args) { 
    String soda = "coke"; 
    String pop = "pepsi"; 
    String coke = "pop"; 
    String pepsi = "soda"; 
    String say = pop; 

    carbonated(soda, pop, pepsi);  // say pepsi not soda or coke 
    carbonated(coke, soda, pop);   // 
    carbonated(pop, pepsi, pepsi);  // 
    carbonated("pop", pop, "koolaid"); // 
    carbonated(say, "say", pop);   // 
} 
public static void carbonated(String coke, String soda, String pop) { 
    System.out.println("say " + soda + " not " + pop + " or " + coke); 
} } 

Когда я компилирую я получаю следующий результат:

say pepsi not soda or coke 
say coke not pepsi or pop 
say soda not soda or pepsi 
say pepsi not koolaid or pop 
say say not pepsi or pepsi 

Может кто-нибудь объяснить, как carbonated() использует строки в вопросе доставки, что вывод? Есть ли кто-нибудь, кто может это прояснить?

ответ

0

Вы становитесь путать из-за вашего соглашения об именах. Это сделает это намного проще, если вы очистить ваши имена:

public class MisterySoda { 
public static void main(String[] args) { 
    String soda = "soda"; 
    String pop = "pop"; 
    String coke = "coke"; 
    String pepsi = "pepsi"; 
    String say = pop; 

    carbonated(soda, pop, pepsi);  // say pepsi not soda or coke 
    carbonated(coke, soda, pop);   // 
    carbonated(pop, pepsi, pepsi);  // 
    carbonated("pop", pop, "koolaid"); // 
    carbonated(say, "say", pop);   // 
} 
public static void carbonated(String str1, String str2, String str3) { 
    System.out.println("say " + str1 + " not " + str2 + " or " + str3); 
} } 

Теперь выход будет понятнее:

say soda not pop or pepsi 
say coke not soda or pop 
say pop not pepsi or pepsi 
say pop not pop or koolaid 
say pop not say or pop 

Порядок, в котором параметры передаются в carbonated(), что имеет значение, а не имена переменных, локальные для функции carbonated().

+0

Но когда вы говорите String soda = «сода»; вы на самом деле создаете новый объект String «сода»? – Sempliciotto

0

soda переменных фактически coke в методе carbonated см этой иллюстрации:

carbonated(  soda,   pop,  pepsi) 
        ↓    ↓   ↓ 
carbonated(String coke, String soda, String pop) 
  • The первого параметр coke будет напечатан в последней приговора
  • The вторых параметр soda будет напечатан в первом предложении
  • последнего параметр pop будет слит в середине

Помните, что это порядка это важно не переменных именами.

+0

Спасибо, господин Марун, но я просто не понимаю. System.out.println ("say" + soda + "not" + pop + "или" + coke); – Sempliciotto

0

Названия переменных сбивают с толку. Сравните с приведенной ниже программой, где имена «нейтральны». Должен иметь смысл сейчас.

public class MisterySoda { 
public static void main(String[] args) { 
    String a = "coke"; 
    String b = "pepsi"; 
    String c = "pop"; 
    String d = "soda"; 
    String e = b; 

    carbonated(a, b, d); 
    carbonated(c, a, b); 
    carbonated(b, d, d); 
    carbonated("pop", b, "koolaid"); 
    carbonated(e, "say", b); 
} 
public static void carbonated(String x, String y, String z) { 
    System.out.println("say " + y + " not " + z + " or " + x); 
} } 
0

Ваша функция:

public static void carbonated(String coke, String soda, String pop) { 
System.out.println("say " + soda + " not " + pop + " or " + coke); 
} 

в simplist форме

public static void function(String string1, String string2, String string3){ 
System.out.println("say " + string2 + " not " + string3 + " or " + string1);} 

поэтому при вызове функции вы действительно писать свои предопределенные строки в string1, string2 и string3.

Хорошая практика говорит, что использовать полезные переменные в вашей функции, чтобы избежать путаницы при вызове вашей функции.