gpt4 book ai didi

json - 为什么我的 Swift 代码无法根据 .json 数据中的值正确计算分数

转载 作者:可可西里 更新时间:2023-11-01 01:37:05 26 4
gpt4 key购买 nike

首先让我说我是编程新手,因此这可能只是一个愚蠢的新手错误。我确实尝试在网上找到答案,但也许我没有在寻找正确的东西,因为我找不到解决方案。

简而言之,我正在尝试根据多个变量计算问答游戏应用程序中的分数。其中一个变量根据 .json 文件中的数据确定要回答的问题的“值”。也就是说,所有问题、答案、值等都存储在 .json 文件中。

.json 文件格式如下:

[
{
"id":"1",
"question":"Which planet do we live on?",
"answers":[
"Earth",
"Mars",
"Venus",
"Jupiter"
],
"difficulty":"Beginner",
"value":"1"
},
{
"id":"2",
"question":"In what year did the Prime Minister of Australia literally just vanish?",
"answers":[
"1967",
"1975",
"2001",
"1939"
],
"difficulty":"Hardest",
"value":"6"
},

并且 .json 数据继续以这种方式处理数百个问题。

现在在我的 Swift 代码中,我以这种方式加载我的 .json 数据:

func LoadAllQuestionsAndAnswers()
{
let path = NSBundle.mainBundle().pathForResource("trivia", ofType: "json")
let jsonData : NSData = NSData(contentsOfFile: path!)!
allEntries = (try! NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers)) as! NSArray
//println(allEntries)

}

我还声明了以下变量:

var questionvalue :String?
var currentgoals :Int! = 0
var currentbehinds :Int! = 0
var currenttotal :Int! = 0

我用来加载问题的代码是:

func LoadQuestion(index : Int)
{
let entry : NSDictionary = shuffledQuestions[index] as! NSDictionary
let question : NSString = entry.objectForKey("question") as! NSString
let arr : NSMutableArray = entry.objectForKey("answers") as! NSMutableArray

let questionvalue : NSString = entry.objectForKey("difficulty") as! NSString

let QID : NSString = entry.objectForKey("id") as! NSString



if let a = arr.objectAtIndex(0) as? String {
self.answertext = a
}

现在开始计分。计分涉及“目标”、“落后”和“总分”。进球得 6 分,落后得 1 分。根据问题的难度,用户可以得分为落后 1、2、3 或 4 分或进球。

我评分的相关代码如下:

func CheckAnswer( answerNumber : Int)
{
if(answerNumber == currentCorrectAnswerIndex)
{
// we have the correct answer


if questionvalue == "Beginner" {currentbehinds = currentbehinds+1}
else{
if questionvalue == "Easy" {currentbehinds = currentbehinds+2}
else{
if questionvalue == "Intermediate" {currentbehinds = currentbehinds+3}
else{
if questionvalue == "Hard" {currentbehinds = currentbehinds+4}
else{
if questionvalue == "Hardest" {currentgoals = currentgoals+1}
}
}
}
}

labelCurrentGoals.text = "\(currentgoals)"
labelCurrentBehinds.text = "\(currentbehinds)"
labelCurrentTotal.text = "\(currenttotal)"
currenttotal = (currentgoals*6) + currentbehinds

如您所见,实际计算是在我的 Swift 代码中完成的,而不是使用 .json 文件中的数据完成的。我只想引用存储在 .json 文件中的“难度”或“值”作为确定应用程序在 Swift 中使用哪种计算的一种方式。然而,每当用户得到正确答案时,得分值都保持为零。

我还尝试通过将 var questionvalue :String? 更改为 var questionvalue :Int! 来使用我的 .json 文件中存储在“值”标签中的数据并更改 let questionvalue : NSString = entry.objectForKey("difficulty") as! NSString 在我的 LoadQuestion 函数中 let questionvalue : NSInteger = entry.objectForKey("value") as! Int 并更改我的 CheckAnswer 函数,以便它引用这些值(即“1”而不是“Beginner”等)。

我还尝试更改 .json 文件中的数据,使数值不是字符串。

但遗憾的是,这些都不起作用。作为新手,我确定我只是遗漏了一些明显的东西,但我似乎找不到答案。我怀疑我没有在搜索正确的东西,无论是在这里还是在谷歌上。如果是这样的话,我会很感激一些链接来检查。或者,如果它像我怀疑的那样简单,那么我的代码的解决方案会很棒。

最佳答案

感谢您花时间清楚地写出您的问题。我猜 JSON 正在正确加载,因为你是强制转换而不是崩溃。这将是一个很长的答案,向您展示我将如何调试您的问题。

我会在您的 CheckAnswer 函数中开始调试,因为这是您更改和计算分数的地方。一开始临时添加如下代码,打印出answerNumbercurrentCorrectAnswerIndexquestionvalue的值。

print("Answer Number: \(answerNumber)")
print("Currently Correct Idx: \(currentCorrectAnswerIndex)")
print("Question Value: \(questionvalue)")

调试的关键是确保您的变量(程序状态)符合您的预期。如果控制台(Xcode 的底部选项卡)没有打印任何内容,则不会调用 CheckAnswer。如果 answerNumbercurrentCorrectAnswerIndex 不同,则不会调用您的内部语句。如果 questionvalue 不是您可能的值之一,那么您可能需要检查您认为设置该值的所有地方。

剧透:

questionvalue 将为 nil

如果您发现了一个意想不到的值,您会怎么做?第一件事是质疑你的假设。您假设变量是在其他地方设置/修改的,但显然不是。检查您认为值已设置/修改的所有位置。有时您必须多次执行此操作,以深入您的代码。

解决方法:

LoadQuestion 中,您从 JSON 获取问题的值并将其分配给局部变量。 let questionvalue : NSString = entry.objectForKey("difficulty") 作为! NSString。 该问题值与页面顶部的问题值不同 (var questionvalue :String?)。 您可以通过删除 let 来分配该值;现在您在类中引用变量而不是 LoadQuestion 函数中的局部变量 questionvalue = entry.objectForKey("difficulty") 作为! NSString

此外,这里还有一些您可能不知道的编程知识。 else if 如果您有多个不同的条件要测试,则可以使用。 a += ba = a + b 的简写语法(这已经被大量使用,所以程序员想出了这个快捷方式)。

if questionvalue == "Beginner" {currentbehinds += 1}
else if questionvalue == "Easy" {currentbehinds += 2}
else if questionvalue == "Intermediate" {currentbehinds += 3}
else if questionvalue == "Hard" {currentbehinds += 4}
else if questionvalue == "Hardest" {currentgoals += 1}

关于json - 为什么我的 Swift 代码无法根据 .json 数据中的值正确计算分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35932342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com