2016-03-27 2 views
1

Я создаю построитель классов RPG, который передает значение stat на основе элемента, выбранного пользователем, исходя из этого выбора, создается новый экземпляр класса, однако, когда я показываю значение - это как будто значение никогда не передавалось.Значения, которые не передаются при запуске класса

Вот мой коду первой страницы класса, то файл, чтобы проверить и установить значение Класса:

package com.polaris.mbti; 

    public class MBTI_Type 
    { 
     private int Se; 
     private int Si; 
     private int Ne; 
     private int Ni; 
     private int Te; 
     private int Ti; 
     private int Fe; 
     private int Fi; 
     private int Vitality; 
     private int Durability; 
     private int Strength; 
     private int Tact; 
     private int Loyalty; 
     private int Friendliness; 
     private int Ambition; 
     private int Insight; 
     private int Foresight; 
     private int Humanity; 
     private int Revelation; 
     private int Charisma; 
     private int Dexterity; 
     private int Evasion; 
     private int Accuracy; 
     private int Agility; 
     private int Zest; 
     private int Grace; 
     private int Intelligence; 
     private int Curiousity; 
     private int Analysis; 
     private int Idealism; 
     private int Enthusiasm; 
     private int Conviction; 
    public void setBaseStats(int introSen, int extroSen, int introThk, int extroThk, int introInuit, int extroInuit, int introFel, int extroFel) 
    { 
     Se = extroSen; 
     Si = introSen; 
     Ne = extroInuit; 
     Ni = introInuit; 
     Te = extroThk; 
     Ti = introThk; 
     Fe = extroFel; 
     Fi = introFel; 
     setMajorStats(); 
    } 
    public void setMajorStats() 
    { 
     setMinorStats(Te, Si, Vitality, Durability, Strength); 
     setMinorStats(Te, Ni, Ambition, Insight, Foresight); 
     setMinorStats(Fe, Si, Tact, Loyalty, Friendliness); 
     setMinorStats(Fe, Ni, Humanity, Revelation, Charisma); 
     setMinorStats(Ti, Se, Dexterity, Evasion, Accuracy); 
     setMinorStats(Ti, Ne, Intelligence, Curiousity, Analysis); 
     setMinorStats(Fi, Se, Agility, Zest, Grace); 
     setMinorStats(Fi, Ne, Idealism, Enthusiasm, Conviction); 
    } 
    public void setMinorStats(double A, double B, double Major, double MinorA, double MinorB) 
    { 
     Major = (A + B)/2; 
     if(A > B) 
     { 
      MinorA = (Major) - 1; 
      MinorB = (Major) + 1; 
     } 
     if(B > A) 
     { 
      MinorA = (Major) + 1; 
      MinorB = (Major) - 1; 
     } 
    } 
    public void levelUp() 
    { 

    } 
    public void showStats() 
    { 
    System.out.println(Vitality); 
    System.out.println(Durability); 
    System.out.println(Strength); 
    System.out.println(Tact); 
    System.out.println(Loyalty); 
    System.out.println(Friendliness); 
    System.out.println(Ambition); 
    System.out.println(Insight); 
    System.out.println(Foresight); 
    System.out.println(Humanity); 
    System.out.println(Revelation); 
    System.out.println(Charisma); 
    System.out.println(Dexterity); 
    System.out.println(Evasion); 
    System.out.println(Accuracy); 
    System.out.println(Agility); 
    System.out.println(Zest); 
    System.out.println(Grace); 
    System.out.println(Intelligence); 
    System.out.println(Curiousity); 
    System.out.println(Analysis); 
    System.out.println(Idealism); 
    System.out.println(Enthusiasm); 
    System.out.println(Conviction); 
    } 


} 

Вот класс с основным методом для тестирования:

package com.polaris.mbti; 
import java.util.Scanner; 

public class TestMBTI2 
{ 

public static void main(String[] args) 
{ 
    Scanner inputDevice = new Scanner(System.in); 
    System.out.println("Please enter a personality type from the choices:"); 
    System.out.println(" 1 - ESTJ"); 
    System.out.println(" 2 - ENTJ"); 
    System.out.println(" 3 - ISTP"); 
    System.out.println(" 4 - INTP"); 
    System.out.println(" 5 - ESFJ"); 
    System.out.println(" 6 - ENFJ"); 
    System.out.println(" 7 - ISFP"); 
    System.out.println(" 8 - INFP"); 
    System.out.println(" 9 - ESTP"); 
    System.out.println(" 10 - ESFP"); 
    System.out.println(" 11 - ISTJ"); 
    System.out.println(" 12 - ISFJ"); 
    System.out.println(" 13 - ENTP"); 
    System.out.println(" 14 - ENFP"); 
    System.out.println(" 15 - INTJ"); 
    System.out.println(" 16 - INFJ"); 
    int choice = inputDevice.nextInt(); 

    switch(choice) 
    { 
    case 1: 
     MBTI_Type ESTJ = new MBTI_Type(); 
     ESTJ.setBaseStats(14, 6, 8, 16, 4, 12, 10, 2); 
     ESTJ.showStats(); 
     break; 
    case 2: 
     MBTI_Type ENTJ = new MBTI_Type(); 
     ENTJ.setBaseStats(4, 12, 8, 16, 14, 6, 10, 2); 
     ENTJ.showStats(); 
     break; 
    case 3: 
     MBTI_Type ISTP = new MBTI_Type(); 
     ISTP.setBaseStats(6, 14, 16, 8, 12, 4, 2, 10); 
     ISTP.showStats(); 
     break; 
    case 4: 
     MBTI_Type INTP = new MBTI_Type(); 
     INTP.setBaseStats(12, 4, 16, 8, 4, 12, 2, 10); 
     INTP.showStats(); 
     break; 
    case 5: 
     MBTI_Type ESFJ = new MBTI_Type(); 
     ESFJ.setBaseStats(14, 6, 10, 2, 4, 12, 8, 16); 
     ESFJ.showStats(); 
     break; 
    case 6: 
     MBTI_Type ENFJ = new MBTI_Type(); 
     ENFJ.setBaseStats(4, 12, 10, 2, 14, 6, 16, 8); 
     ENFJ.showStats(); 
     break; 
    case 7: 
     MBTI_Type ISFP = new MBTI_Type(); 
     ISFP.setBaseStats(6, 14, 2, 10, 12, 4, 16, 8); 
     ISFP.showStats(); 
     break; 
    case 8: 
     MBTI_Type INFP = new MBTI_Type(); 
     INFP.setBaseStats(12, 4, 2, 10, 6, 14, 16, 8); 
     INFP.showStats(); 
     break; 
    case 9: 
     MBTI_Type ESTP = new MBTI_Type(); 
     ESTP.setBaseStats(8, 16, 14, 6, 10, 2, 4, 12); 
     ESTP.showStats(); 
     break; 
    case 10: 
     MBTI_Type ESFP = new MBTI_Type(); 
     ESFP.setBaseStats(8, 16, 4, 12, 10, 2, 14, 6); 
     ESFP.showStats(); 
     break; 
    case 11: 
     MBTI_Type ISTJ = new MBTI_Type(); 
     ISTJ.setBaseStats(16, 8, 6, 14, 2, 10, 12, 4); 
     ISTJ.showStats(); 
     break; 
    case 12: 
     MBTI_Type ISFJ = new MBTI_Type(); 
     ISFJ.setBaseStats(16, 8, 12, 4, 2, 10, 6, 14); 
     ISFJ.showStats(); 
     break; 
    case 13: 
     MBTI_Type ENTP = new MBTI_Type(); 
     ENTP.setBaseStats(10, 2, 14, 6, 8, 16, 4, 12); 
     ENTP.showStats(); 
     break; 
    case 14: 
     MBTI_Type ENFP = new MBTI_Type(); 
     ENFP.setBaseStats(10, 2, 4, 12, 8, 16, 14, 6); 
     ENFP.showStats(); 
     break; 
    case 15: 
     MBTI_Type INTJ = new MBTI_Type(); 
     INTJ.setBaseStats(2, 10, 6, 14, 16, 8, 12, 4); 
     INTJ.showStats(); 
     break; 
    case 16: 
     MBTI_Type INFJ = new MBTI_Type(); 
     INFJ.setBaseStats(2, 10, 12, 4, 16, 8, 14, 6); 
     INFJ.showStats(); 
     break; 
    } 

} 

} 

ответ

1

Проблема, похоже, будет setMinorStats способ. Из реализации, кажется, он вычисляет некоторые значения. Однако эти значения не заданы для объекта (т. Е. Нет назначений this.something = value).

Метод изменяет значения переданных параметров, однако он не изменит фактические значения из-за того, что Java составляет pass by value. Я бы порекомендовал взглянуть на примеры these.

0

Как общий принцип при отладке, придерживайтесь значения по умолчанию и посмотрите, если это произойдет, тогда вы узнаете, не запущена ли ваша программа на коммутаторе, или просто не узнаете, есть ли у вас значения.

0

Проблема в том, что вы никогда не устанавливали ни один из атрибутов, которые вы печатаете (Vitality, Durability и т. Д.).

Вы имели в виду установить их в setMinorStats()?

В в методе, если заявления ваших setMinorStats(), добавить что-то к этому эффекту

this.Vitality = Major;

Если заменить ваш метод с моим ниже, и работать с клавиатурным вводом 1 для первого случая, вы увидите, что Vitality будет установлен на 8, когда он выйдет.

public void setMinorStats(double A, double B, double Major, double MinorA, double MinorB) 
    { 
     Major = (A + B)/2; 
     if(A > B) 
     { 
      MinorA = (Major) - 1; 
      MinorB = (Major) + 1; 

      /* 
      * Here is what you need to do-- set your fields based on your logic 
      */ 
      this.Vitality = (int)Major; 
     } 
     if(B > A) 
     { 
      MinorA = (Major) + 1; 
      MinorB = (Major) - 1; 
     } 
    } 
+0

Когда я называю этот метод, другие статистические данные рассчитываются на основе восьми базовых характеристик. Этот метод вызывает другой, который вызывает другой. – dpolaristar

+0

Нет, вызовы функций в методе setMinorStats() отсутствуют, и вы не устанавливаете значения, которые вы печатаете. Как говорит Даршан в своем ответе, параметры, которые вы передаете setMinorStats(), являются 'by value', а не ссылкой, что означает, что вы не влияете на поля класса (Vitality и т. Д.). –

+0

Замените свой setMinorStats() моим, и запустите с клавиатурным вводом 1 для проверки первого случая. Обратите внимание, что в моем коде поле Vitality теперь имеет значение 8 на выходе. –

0

Вот решение моей проблемы, я просто разделил свой метод на три других и сделал им заявления о возврате, как показано ниже.

public void setBaseStats(int introSen, int extroSen, int introThk, int extroThk, int introInuit, int extroInuit, int introFel, int extroFel) 
{ 
    Se = extroSen; 
    Si = introSen; 
    Ne = extroInuit; 
    Ni = introInuit; 
    Te = extroThk; 
    Ti = introThk; 
    Fe = extroFel; 
    Fi = introFel; 
    setMajorStats(); 
} 
public void setMajorStats() 
{ 
    Vitality = setMinorStats(Te, Si); 
    Durability = setMinorStatsA(Vitality, Te, Si); 
    Strength = setMinorStatsB(Vitality, Te, Si); 
    Ambition = setMinorStats(Te, Ni); 
    Insight = setMinorStatsA(Ambition, Te, Ni); 
    Foresight = setMinorStatsB(Ambition, Te, Ni); 
    Tact = setMinorStats(Fe, Si); 
    Loyalty = setMinorStatsA(Tact, Fe, Si); 
    Friendliness = setMinorStatsB(Tact, Fe, Si); 
    Humanity = setMinorStats(Fe, Ni); 
    Revelation = setMinorStatsA(Humanity, Fe, Ni); 
    Charisma = setMinorStatsB(Humanity, Fe, Ni); 
    Dexterity = setMinorStats(Ti, Se); 
    Evasion = setMinorStatsA(Dexterity, Ti, Se); 
    Accuracy = setMinorStatsB(Dexterity, Ti, Se); 
    Intelligence = setMinorStats(Ti, Ne); 
    Curiousity = setMinorStatsA(Intelligence, Ti, Ne); 
    Analysis =setMinorStatsB(Intelligence, Ti, Ne); 
    Agility = setMinorStats(Fi, Se); 
    Zest = setMinorStatsA(Agility, Fi, Se); 
    Grace = setMinorStatsB(Agility, Fi, Se); 
    Idealism = setMinorStats(Fi, Ne); 
    Enthusiasm = setMinorStatsA(Idealism, Fi, Ne); 
    Conviction = setMinorStatsB(Idealism, Fi, Ne); 
} 
public int setMinorStats(int A, int B) 
{ 
    int Major = (A + B)/2; 
    return Major; 
} 
public int setMinorStatsA(int Major, int A, int B) 
{ 
    int MinorA = 0; 
    if(A > B) 
     MinorA = (Major) - 1; 
    if(B > A) 
     MinorA = (Major) + 1; 
    return MinorA; 
} 
public int setMinorStatsB(int Major, int A, int B) 
{ 
    int MinorB = 0; 
    if(A > B) 
     MinorB = (Major) + 1; 
    if(B > A) 
     MinorB = (Major) - 1; 
    return MinorB; 
} 
Смежные вопросы