我对编程非常陌生,而且我一直在尝试练习。基本上我需要计算我在未分类的5张牌中找到的牌对数。我解释它的方式可能是错的, 例如,其中一个字符串如下所示:' sTh3c9hQ' s是黑桃,T是十,h是心... 我不确定为什么我的代码不起作用。可能出于一个非常合乎逻辑的原因我无视。有人可以给我一些建议吗? 感谢。
int count = 0;
for(int i = 0; i<hand.length()-2; i+=2){
for(int j = 1; j<hand.length()-3; j+=2){
if(hand.charAt(i) == hand.charAt(i+2) && hand.charAt(j) ==
hand.charAt(j+3)) {
count++;
}
}
}
return count;
在&#39; sTh3c9hQ&#39;的情况下所需的输出 将是0,因为没有对。 在'sTh3c9sT&#39;的情况下所需的输出。 将是1,因为有一对。 等。 如果有两对,则计数为2。 如果有三个,则计数为3,等等
答案 0 :(得分:1)
我个人认为你应该将字符串拆分成一个列表,而不是跟踪你在字符串本身的位置,它使for循环更容易理解。类似的东西看起来像:
private class ScheduleStudyTime
{
public int STUDTIME_ID { get; set; }
public int DAY_ID { get; set; }
public int LESSTIME_ID { get; set; }
public int SCHOOLYEAR_ID { get; set; }
}
private void LoadStudyTime()
{
var fourths = dbContext.FOURTH.Where(x => x.CHOOSE_SCHEDULE_FOURTH.Any(a => a.SCHEDVARIANT_ID == ScheduleVariant.SCHEDVARIANT_ID)).ToList();
int fourthCount = fourths != null ? fourths.Count() : 0;
List<ScheduleStudyTime>[] studyTimeList = new List<ScheduleStudyTime>[fourthCount];
for (int i = 0; i <= (fourthCount - 1); ++i)
{
int fourthId = fourths[i].FOURTH_ID;
var chooseStudyTime = from CHOOSE_STUDY_FOURTH in dbContext.CHOOSE_STUDY_FOURTH
where CHOOSE_STUDY_FOURTH.STUDY_TIME.SCHOOLYEAR_ID == Properties.Settings.Default.SchoolYearId &&
CHOOSE_STUDY_FOURTH.FOURTH_ID == fourthId
group CHOOSE_STUDY_FOURTH by new
{
CHOOSE_STUDY_FOURTH.STUDY_TIME.STUDTIME_ID,
CHOOSE_STUDY_FOURTH.STUDY_TIME.DAY_ID,
CHOOSE_STUDY_FOURTH.STUDY_TIME.LESSTIME_ID,
CHOOSE_STUDY_FOURTH.STUDY_TIME.SCHOOLYEAR_ID
}
into gcsf
select new ScheduleStudyTime
{
STUDTIME_ID = gcsf.Key.STUDTIME_ID,
DAY_ID = gcsf.Key.DAY_ID,
LESSTIME_ID = gcsf.Key.LESSTIME_ID,
SCHOOLYEAR_ID = gcsf.Key.SCHOOLYEAR_ID
};
studyTimeList[i] = chooseStudyTime.ToList();
}
var commonStudyTime = studyTimeList.Aggregate((xs, ys) => xs.Intersect(ys).ToList());
}
答案 1 :(得分:0)
//if only one pair can exist of each, this should work
int count = 0;
boolean par = false;
for(int i = 0; i<hand.length()-4; i+=2){
par = false;
for(int j = i+2; j<hand.length()-2 && !par; j+=2){
if(hand.charAt(i) == hand.charAt(j) && hand.charAt(i+1) == hand.charAt(j+1))
{
count++;
par = true;
}
}
}
return count;
答案 2 :(得分:0)
这是一个单行解决方案:
return hand.replaceAll("[a-z]|(.)(?!.*\\1)", "").length();
这将替换所有套装(小写字母)和不的所有排名字符,稍后在字符串中添加另一个副本(即删除它们),只留下配对的排名。在结果上调用length()
会给出对数的计数。
请参阅匹配所有非配对字符的正则表达式的live demo。