我很抱歉问这些家伙,但这个问题一直是我存在的祸根一周。我本来应该能够解决它,但我似乎无法让它工作。我需要做的是进行性格测试的代码。它基于这个圈子:
1
10 2
9 3
8 4
7 5
6
所以我已经把我的意见交给了我。我有三个:type1,pVec1和subType1。 pVec是我假设我必须索引的向量。 type1被赋予我作为我的主导或隐性特征。我要做的就是确定我的其他特征是什么。如果他们给了我我的主导特征,那么第一个字母将被大写。如果它是隐性的,它是小写的。主导和隐性特征总是相互对立。如果我有一个显性人格类型3,我的隐性将是8型(使用圆圈)。此外,我的翅膀个性类型是基于我的主导类型。它们是左右数字(在这种情况下,2和4将是我的翅膀个性类型)。子类型只是告诉我是否要添加关于我的主导类型的东西。
Test Cases:
type1 = 'helper';
pVec1 = ['Reformer Helper Achiever Individualist Dreamer Investigator
Loyalist Enthusiast Challenger Peacemaker'];
subType1 = 'alone';
[dom1, rec1, wings1] = personalityTest(type1,pVec1,subType1);
dom1 > 'Loyalist_a'
rec1 => 'Helper'
wings1 => 'Enthusiast Investigator'
所以我必须让它做那样的事情。到目前为止,我有:
function[dominant, recessive, wings] = personalityTest(type, pVec, subtype)
type_list = strsplit(pVec);
position = find(strcmpi(type, type_list), 1, 'first');
dominant = upper(type(1));
dominant = char(type);
recessive = lower(type(1));
recessive = char(type);
switch type
case recessive
dominant = position + 5;
case dominant
recessive = char(dominant - 5);
end
leftwing = char(dominant + 1);
rightwing = char(dominant - 1);
wings = [leftwing rightwing];
if strcmp(subtype, 'alone')
dominant = [dominant '_a'];
elseif strcmp(subtype, 'smallGroup')
dominant = [dominant, '_s'];
else
dominant = [dominant, '_1'];
end
我的功能一直让我为显性(或只是_a)留空。我该如何解决这个问题?我想让它在第五个位置给我这个词。
答案 0 :(得分:3)
单步执行代码将有助于向您显示错误。
type = 'helper';
pVec = ['Reformer Helper Achiever Individualist Dreamer Investigator
Loyalist Enthusiast Challenger Peacemaker'];
subType = 'alone';
执行功能的以下行
type_list = strsplit(pVec);
position = find(strcmpi(type, type_list), 1, 'first');
dominant = upper(type(1));
dominant = char(type);
recessive = lower(type(1));
recessive = char(type);
dominant
和recessive
的结果设置为这些值
dominant = 'helper'
recessive = 'helper'
我认为,这里的意图是确定类型字符串的第一个字符是大写还是小写。换句话说,我们想要True
或False
的{{1}}或dominant
值。
函数recessive
将输入upper()
或string
转换为大写。要检查第一个字符是大写还是小写,请尝试
char
作业
dominant = type(1) == upper(type(1))
recessive = type(1) == lower(type(1))
是不必要的(它们会覆盖以前的计算!)。
现在接下来的代码行将更接近于产生正确的输出。
dominant = char(type);
recessive = char(type);
这里有三个(可能是四个)问题。
switch type
case recessive
dominant = position + 5;
case dominant
recessive = char(dominant - 5);
end
。如果dominant = position + 5
的值为position
,则9
将等于dominant
。由于此处的目的是使用14
索引到类型列表,因此可能会导致数组索引超出边界错误。解决这个问题的方法是使用模数(余数)函数,即dominant
。余数函数基本上是“除dominant = (position + 4) % 10 + 1
之后(p + 5)
的余数是多少。奇怪的1和4是将可能分配给10
的值的范围保持在[1}之内,10]。
如果人格特质向量(dominant
)总是长度为pVec
,那么将5硬编码到计算中就可以了。但是,如果10
的长度可以变化,那么您需要确定正确的值来增加位置。如果长度是偶数,则应为pVec
。
在您当前的代码迭代中,行length(pVec)/2
将评估为recessive = char(dominant - 5)
。当你从字符串中减去一个整数然后再次转换为字符串时,这并没有多大意义。而是在类型列表中计算隐性特征的索引。这与2中概述的程序完全相同。
使用表明其功能的变量名称可以帮助您更清楚地思考代码。
目标是使用recessive = char('helper' - 5)
和dominant
作为recessive
的索引。您忘记在每个交换机案例中设置2个索引中的1个。
下一行代码:
type_list
索引到leftwing = char(dominant + 1);
rightwing = char(dominant - 1);
以获得左翼和右翼的正确值。注意数组索引越界错误。
下一行:
type_list
再次,索引问题。解决这些问题,你就可以免费回家了。