java—初始化类时未传递值

6qftjkof  于 2021-07-13  发布在  Java
关注(0)|答案(4)|浏览(488)

我正在制作一个rpg类生成器,它根据用户选择的项传递stat值,根据这个选择,会生成一个新的类示例,但是当我显示值时,就好像从未传递过值一样。
下面是我的代码,首先是类页面,然后是一个用于测试和设置类值的文件:

  1. package com.polaris.mbti;
  2. public class MBTI_Type
  3. {
  4. private int Se;
  5. private int Si;
  6. private int Ne;
  7. private int Ni;
  8. private int Te;
  9. private int Ti;
  10. private int Fe;
  11. private int Fi;
  12. private int Vitality;
  13. private int Durability;
  14. private int Strength;
  15. private int Tact;
  16. private int Loyalty;
  17. private int Friendliness;
  18. private int Ambition;
  19. private int Insight;
  20. private int Foresight;
  21. private int Humanity;
  22. private int Revelation;
  23. private int Charisma;
  24. private int Dexterity;
  25. private int Evasion;
  26. private int Accuracy;
  27. private int Agility;
  28. private int Zest;
  29. private int Grace;
  30. private int Intelligence;
  31. private int Curiousity;
  32. private int Analysis;
  33. private int Idealism;
  34. private int Enthusiasm;
  35. private int Conviction;
  36. public void setBaseStats(int introSen, int extroSen, int introThk, int extroThk, int introInuit, int extroInuit, int introFel, int extroFel)
  37. {
  38. Se = extroSen;
  39. Si = introSen;
  40. Ne = extroInuit;
  41. Ni = introInuit;
  42. Te = extroThk;
  43. Ti = introThk;
  44. Fe = extroFel;
  45. Fi = introFel;
  46. setMajorStats();
  47. }
  48. public void setMajorStats()
  49. {
  50. setMinorStats(Te, Si, Vitality, Durability, Strength);
  51. setMinorStats(Te, Ni, Ambition, Insight, Foresight);
  52. setMinorStats(Fe, Si, Tact, Loyalty, Friendliness);
  53. setMinorStats(Fe, Ni, Humanity, Revelation, Charisma);
  54. setMinorStats(Ti, Se, Dexterity, Evasion, Accuracy);
  55. setMinorStats(Ti, Ne, Intelligence, Curiousity, Analysis);
  56. setMinorStats(Fi, Se, Agility, Zest, Grace);
  57. setMinorStats(Fi, Ne, Idealism, Enthusiasm, Conviction);
  58. }
  59. public void setMinorStats(double A, double B, double Major, double MinorA, double MinorB)
  60. {
  61. Major = (A + B)/2;
  62. if(A > B)
  63. {
  64. MinorA = (Major) - 1;
  65. MinorB = (Major) + 1;
  66. }
  67. if(B > A)
  68. {
  69. MinorA = (Major) + 1;
  70. MinorB = (Major) - 1;
  71. }
  72. }
  73. public void levelUp()
  74. {
  75. }
  76. public void showStats()
  77. {
  78. System.out.println(Vitality);
  79. System.out.println(Durability);
  80. System.out.println(Strength);
  81. System.out.println(Tact);
  82. System.out.println(Loyalty);
  83. System.out.println(Friendliness);
  84. System.out.println(Ambition);
  85. System.out.println(Insight);
  86. System.out.println(Foresight);
  87. System.out.println(Humanity);
  88. System.out.println(Revelation);
  89. System.out.println(Charisma);
  90. System.out.println(Dexterity);
  91. System.out.println(Evasion);
  92. System.out.println(Accuracy);
  93. System.out.println(Agility);
  94. System.out.println(Zest);
  95. System.out.println(Grace);
  96. System.out.println(Intelligence);
  97. System.out.println(Curiousity);
  98. System.out.println(Analysis);
  99. System.out.println(Idealism);
  100. System.out.println(Enthusiasm);
  101. System.out.println(Conviction);
  102. }
  103. }

下面是一个类,它有一个主要的测试方法:

  1. package com.polaris.mbti;
  2. import java.util.Scanner;
  3. public class TestMBTI2
  4. {
  5. public static void main(String[] args)
  6. {
  7. Scanner inputDevice = new Scanner(System.in);
  8. System.out.println("Please enter a personality type from the choices:");
  9. System.out.println(" 1 - ESTJ");
  10. System.out.println(" 2 - ENTJ");
  11. System.out.println(" 3 - ISTP");
  12. System.out.println(" 4 - INTP");
  13. System.out.println(" 5 - ESFJ");
  14. System.out.println(" 6 - ENFJ");
  15. System.out.println(" 7 - ISFP");
  16. System.out.println(" 8 - INFP");
  17. System.out.println(" 9 - ESTP");
  18. System.out.println(" 10 - ESFP");
  19. System.out.println(" 11 - ISTJ");
  20. System.out.println(" 12 - ISFJ");
  21. System.out.println(" 13 - ENTP");
  22. System.out.println(" 14 - ENFP");
  23. System.out.println(" 15 - INTJ");
  24. System.out.println(" 16 - INFJ");
  25. int choice = inputDevice.nextInt();
  26. switch(choice)
  27. {
  28. case 1:
  29. MBTI_Type ESTJ = new MBTI_Type();
  30. ESTJ.setBaseStats(14, 6, 8, 16, 4, 12, 10, 2);
  31. ESTJ.showStats();
  32. break;
  33. case 2:
  34. MBTI_Type ENTJ = new MBTI_Type();
  35. ENTJ.setBaseStats(4, 12, 8, 16, 14, 6, 10, 2);
  36. ENTJ.showStats();
  37. break;
  38. case 3:
  39. MBTI_Type ISTP = new MBTI_Type();
  40. ISTP.setBaseStats(6, 14, 16, 8, 12, 4, 2, 10);
  41. ISTP.showStats();
  42. break;
  43. case 4:
  44. MBTI_Type INTP = new MBTI_Type();
  45. INTP.setBaseStats(12, 4, 16, 8, 4, 12, 2, 10);
  46. INTP.showStats();
  47. break;
  48. case 5:
  49. MBTI_Type ESFJ = new MBTI_Type();
  50. ESFJ.setBaseStats(14, 6, 10, 2, 4, 12, 8, 16);
  51. ESFJ.showStats();
  52. break;
  53. case 6:
  54. MBTI_Type ENFJ = new MBTI_Type();
  55. ENFJ.setBaseStats(4, 12, 10, 2, 14, 6, 16, 8);
  56. ENFJ.showStats();
  57. break;
  58. case 7:
  59. MBTI_Type ISFP = new MBTI_Type();
  60. ISFP.setBaseStats(6, 14, 2, 10, 12, 4, 16, 8);
  61. ISFP.showStats();
  62. break;
  63. case 8:
  64. MBTI_Type INFP = new MBTI_Type();
  65. INFP.setBaseStats(12, 4, 2, 10, 6, 14, 16, 8);
  66. INFP.showStats();
  67. break;
  68. case 9:
  69. MBTI_Type ESTP = new MBTI_Type();
  70. ESTP.setBaseStats(8, 16, 14, 6, 10, 2, 4, 12);
  71. ESTP.showStats();
  72. break;
  73. case 10:
  74. MBTI_Type ESFP = new MBTI_Type();
  75. ESFP.setBaseStats(8, 16, 4, 12, 10, 2, 14, 6);
  76. ESFP.showStats();
  77. break;
  78. case 11:
  79. MBTI_Type ISTJ = new MBTI_Type();
  80. ISTJ.setBaseStats(16, 8, 6, 14, 2, 10, 12, 4);
  81. ISTJ.showStats();
  82. break;
  83. case 12:
  84. MBTI_Type ISFJ = new MBTI_Type();
  85. ISFJ.setBaseStats(16, 8, 12, 4, 2, 10, 6, 14);
  86. ISFJ.showStats();
  87. break;
  88. case 13:
  89. MBTI_Type ENTP = new MBTI_Type();
  90. ENTP.setBaseStats(10, 2, 14, 6, 8, 16, 4, 12);
  91. ENTP.showStats();
  92. break;
  93. case 14:
  94. MBTI_Type ENFP = new MBTI_Type();
  95. ENFP.setBaseStats(10, 2, 4, 12, 8, 16, 14, 6);
  96. ENFP.showStats();
  97. break;
  98. case 15:
  99. MBTI_Type INTJ = new MBTI_Type();
  100. INTJ.setBaseStats(2, 10, 6, 14, 16, 8, 12, 4);
  101. INTJ.showStats();
  102. break;
  103. case 16:
  104. MBTI_Type INFJ = new MBTI_Type();
  105. INFJ.setBaseStats(2, 10, 12, 4, 16, 8, 14, 6);
  106. INFJ.showStats();
  107. break;
  108. }
  109. }
  110. }
uujelgoq

uujelgoq1#

问题似乎出在 setMinorStats 方法。从实现来看,它似乎在计算一些值。但是,这些值没有设置到对象(即没有 this.something = value 工作分配)。
该方法修改了传递的参数的值,但是不会因为java的存在而改变实际值 pass by value . 我建议看一下这些例子。

ut6juiuv

ut6juiuv2#

作为调试时的一般原则,请输入一个默认值,然后查看是否出现该值,这样您就知道您的程序是否根本没有到达开关,或者只是无法识别任何值(如果有)。

yjghlzjz

yjghlzjz3#

问题是,你从来没有真正设置任何属性,你打印(生命力,耐用性等)。
你的意思是在setminorstats()中设置它们吗?
在setminorstats()方法的if语句中,添加这样的内容 this.Vitality = Major; 如果用下面我的方法替换您的方法,并在第一种情况下使用键盘输入1运行,您将看到vitality在输出时设置为8。

  1. public void setMinorStats(double A, double B, double Major, double MinorA, double MinorB)
  2. {
  3. Major = (A + B)/2;
  4. if(A > B)
  5. {
  6. MinorA = (Major) - 1;
  7. MinorB = (Major) + 1;
  8. /*
  9. * Here is what you need to do-- set your fields based on your logic
  10. */
  11. this.Vitality = (int)Major;
  12. }
  13. if(B > A)
  14. {
  15. MinorA = (Major) + 1;
  16. MinorB = (Major) - 1;
  17. }
  18. }
展开查看全部
sulc1iza

sulc1iza4#

这是我的问题的一个解决方案,我简单地将我的方法分为三个其他方法,并使它们具有返回语句,如下所示。

  1. public void setBaseStats(int introSen, int extroSen, int introThk, int extroThk, int introInuit, int extroInuit, int introFel, int extroFel)
  2. {
  3. Se = extroSen;
  4. Si = introSen;
  5. Ne = extroInuit;
  6. Ni = introInuit;
  7. Te = extroThk;
  8. Ti = introThk;
  9. Fe = extroFel;
  10. Fi = introFel;
  11. setMajorStats();
  12. }
  13. public void setMajorStats()
  14. {
  15. Vitality = setMinorStats(Te, Si);
  16. Durability = setMinorStatsA(Vitality, Te, Si);
  17. Strength = setMinorStatsB(Vitality, Te, Si);
  18. Ambition = setMinorStats(Te, Ni);
  19. Insight = setMinorStatsA(Ambition, Te, Ni);
  20. Foresight = setMinorStatsB(Ambition, Te, Ni);
  21. Tact = setMinorStats(Fe, Si);
  22. Loyalty = setMinorStatsA(Tact, Fe, Si);
  23. Friendliness = setMinorStatsB(Tact, Fe, Si);
  24. Humanity = setMinorStats(Fe, Ni);
  25. Revelation = setMinorStatsA(Humanity, Fe, Ni);
  26. Charisma = setMinorStatsB(Humanity, Fe, Ni);
  27. Dexterity = setMinorStats(Ti, Se);
  28. Evasion = setMinorStatsA(Dexterity, Ti, Se);
  29. Accuracy = setMinorStatsB(Dexterity, Ti, Se);
  30. Intelligence = setMinorStats(Ti, Ne);
  31. Curiousity = setMinorStatsA(Intelligence, Ti, Ne);
  32. Analysis =setMinorStatsB(Intelligence, Ti, Ne);
  33. Agility = setMinorStats(Fi, Se);
  34. Zest = setMinorStatsA(Agility, Fi, Se);
  35. Grace = setMinorStatsB(Agility, Fi, Se);
  36. Idealism = setMinorStats(Fi, Ne);
  37. Enthusiasm = setMinorStatsA(Idealism, Fi, Ne);
  38. Conviction = setMinorStatsB(Idealism, Fi, Ne);
  39. }
  40. public int setMinorStats(int A, int B)
  41. {
  42. int Major = (A + B)/2;
  43. return Major;
  44. }
  45. public int setMinorStatsA(int Major, int A, int B)
  46. {
  47. int MinorA = 0;
  48. if(A > B)
  49. MinorA = (Major) - 1;
  50. if(B > A)
  51. MinorA = (Major) + 1;
  52. return MinorA;
  53. }
  54. public int setMinorStatsB(int Major, int A, int B)
  55. {
  56. int MinorB = 0;
  57. if(A > B)
  58. MinorB = (Major) + 1;
  59. if(B > A)
  60. MinorB = (Major) - 1;
  61. return MinorB;
  62. }
展开查看全部

相关问题