我正在使用库存系统作为我目前所知的c ++数量的挑战,我正在使用带有枚举索引的数组并使用值true或false初始化。这是代码:
using namespace std;
enum items
{
LASER_RIFLE,
LASER_SWORD,
LASER_PISTOL,
PLASMA_LAUNCHER,
MAX_ITEMS
};
void playerInventory()
{
bool items[MAX_ITEMS];
items[LASER_RIFLE] = true;
items[LASER_SWORD] = false;
items[LASER_PISTOL] = false;
items[PLASMA_LAUNCHER] = true;
int itemName;
for (int item = 0; item <= MAX_ITEMS; ++item)
if (items[item] == true)
{
switch (itemName)
{
case 1:
cout << "Laser Rifle\n";
break;
case 2:
cout << "Laser Sword\n";
break;
case 3:
cout << "Laser Pistol\n";
break;
case 4:
cout << "Plasma Launcher \n";
break;
}
}
else
cout << "Not in Inventory\n";
}
该声明仅对激光手枪评估为真,对其他一切评估为假。我无法弄清楚为什么会这样。
答案 0 :(得分:1)
您正在切换myController.php
$Activity = Activity::lists('name', 'value');
array_walk($Activity, function(&$item2, $key) {
$item2 = trans('kcal.' . $item2);
});
。您应切换为itemName
默认情况下的枚举从0开始,而不是1.您的案例应从0开始。
在for循环中,您必须检查item
而不是<
。
结果如下:
<=
请参阅:ideone
答案 1 :(得分:0)
您永远不会为itemName分配任何内容。
将开关(itemName)更改为切换(项目)。
答案 2 :(得分:0)
您有两个地方正在调用undefined behaviour:
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
groupIdQuery = ParseQuery.getQuery("Recent");
groupIdQuery.whereContainsAll("members", Arrays.asList(user1ObjectId, user2ObjectId));
Log.d("objectArray", Arrays.asList(user1ObjectId, user2ObjectId).toString());
groupIdQuery.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
if (e == null && list.size() != 0) {
for (ParseObject dealsObject : list) {
recentClassObjectId = dealsObject.getObjectId();
groupId = (String) dealsObject.get("groupId");
Log.d("!!!!!GroupId", groupId);
//String members = (String) dealsObject.get("members");
//Toast.makeText(getApplicationContext(), "ObjectId: " + recentClassObjectId + "\n" + "GroupId: " + groupId + " value present", Toast.LENGTH_LONG).show();
}
editor = sharedpreferences.edit();
editor.putString(gId, groupId);
Log.d("ifGroupId", groupId);
editor.commit();
} else {
SharedPreferences.Editor editor = sharedpreferences.edit();
Toast.makeText(getApplicationContext(), " No Data present", Toast.LENGTH_LONG).show();
groupId = user1ObjectId + user2ObjectId;
editor.putString(gId, groupId);
editor.commit();
Log.d("!!!!ElseGroupId", groupId);
entryToRecentChat = new ParseObject("Recent");
entryToRecentChat.put("groupId", groupId);
entryToRecentChat.put("lastUser", ParseObject.createWithoutData("_User", user1ObjectId));
entryToRecentChat.put("user", ParseObject.createWithoutData("_User", user2ObjectId));
entryToRecentChat.addAllUnique("members", Arrays.asList(user1ObjectId, user2ObjectId));
entryToRecentChat.saveEventually(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Toast.makeText(getApplicationContext(), "Value saved", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Value not saved", Toast.LENGTH_LONG).show();
Log.d("exception", e.getMessage());
}
}
});
Log.d("elseGroupId", groupId);
editor = sharedpreferences.edit();
editor.putString(gId, groupId);
Log.d("ifGroupId", groupId);
editor.commit();
}
}
});
valueId = sharedpreferences.getString(gId, "default");
mFirebaseRef = new Firebase(FIREBASE_URL).child(valueId);
Log.d("FinalGroupId", valueId);
应为item <= MAX_ITEMS
;否则你将超出其范围访问数组。item < MAX_ITEMS
。一旦你有未定义的行为,所有的赌注都会被取消。不要指望该程序有任何合理的输出。
答案 3 :(得分:0)
itemName永远不会被初始化,所以使用itemName INSIDE for scope并用它来均衡真实的或者直接用item更改它。
哦,你正在寻找一个超出阵列范围的地方。数组的长度可能为MAX_ITEMS
长,但您的索引从0开始。因此,您应使用item < MAX_ITEMS
代替item <= MAX_ITEMS
。
顺便说一下:您可能希望使用默认的switch-case结构。这不是必需的,但它可以成为救星。