私は過去 3 時間このコードを見ていて、かなり行き詰まっています。助けていただければ幸いです、ありがとう。
ファイル: UnsortedType.h
#include "ItemType.h"
class UnsortedType{
public:
UnsortedType();
void RetireveItem(ItemType& item, bool& found);
bool InsertItem(ItemType item);
private:
int length;
ItemType info[MAX_ITEMS];
};
ファイル: UnsortedType.cpp
#include "UnsortedType.h"
#include <iostream>
UnsortedType::UnsortedType() {
length = 0;
}
void UnsortedType::RetireveItem(ItemType& item, bool& found) {
bool moreToSearch = true;
int location = 0;
found = false;
moreToSearch = (location < length);
while (moreToSearch && !found) {
switch (item.ComparedTo(info[location])) {
case LESS:
location++;
moreToSearch = (location < length);
break;
case GREATER:
location++;
moreToSearch = (location < length);
break;
case EQUAL:
found = true;
break;
}
}
if (found) {
item = info[location];
std::cout << "Item " << item.getValue() << " has been retrieved." << std::endl;
}
else {
std::cout << "Item " << item.getValue() << " has NOT found and has NOT been retrieved."
}
}
bool UnsortedType::InsertItem(ItemType item) {
if (length == MAX_ITEMS) {
std::cout << "List is Full!" << std::endl;
std::cout << "Item " << item.getValue() << " has not been added." << std::endl;
return false;
} else {
std::cout << "Item " << item.getValue() << " added successfully." << std::endl;
info[length] = item;
length++;
return true;
}
}
ファイル: ItemType.h
const int MAX_ITEMS = 40;
enum RelationType{LESS,GREATER,EQUAL};
class ItemType{
private:
int value;
public:
ItemType();
ItemType(int value);
RelationType ComparedTo(ItemType otherItem);
void Initialize(int value);
void printItem();
int getValue();
};
ファイル: ItemType.cpp
ItemType::ItemType(){
this->value=0;
}
ItemType::ItemType(int value){
this->value = value;
}
RelationType ItemType::ComparedTo(ItemType otherItem){
if(value < otherItem.value){
return LESS;
}
if(value == otherItem.value){
return EQUAL;
}
if(value < otherItem.value){
return GREATER;
}
}
void ItemType::Initialize(int value){
this->value = value;
}
void ItemType::printItem(){
std::cout << "Item Type: " << this->value <<std::endl;
}
int ItemType::getValue(){
return this->value;
}
注: 上記のコードでは、関係ないと思われるコードの一部を省略しています。したがって、コードをコピーして貼り付けて実行すると、いくつかの include ステートメント ( iostream など) が必要になる場合があります。
ここに質問があります:
次のようにメインを実行すると:
UnsortedType unsortedType;
bool item3found = false;
ItemType item3(3);
unsortedType.InsertItem(item3);
unsortedType.RetireveItem(item3, item3found);
bool item1found = false;
ItemType item1(1);
unsortedType.InsertItem(item1);
unsortedType.RetireveItem(item1, item1found);
bool item2found = false;
ItemType item2(2);
unsortedType.RetireveItem(item2, item2found);
問題はありません。
出力は次のとおりです。
Item 3 added successfully.
Item 3 has been retrieved.
Item 1 added successfully.
Item 1 has been retrieved.
Item 2 has NOT found and has NOT been retrieved.
ただし、最初に item1 を追加して item1 を取得し、次に item3 を追加して item3 を取得すると、switch ステートメントが突然機能しなくなります。
したがって、これは奇妙な状況でのメイン ファイルです。
UnsortedType unsortedType;
bool item1found = false;
ItemType item1(1);
unsortedType.InsertItem(item1);
unsortedType.RetireveItem(item1, item1found);
bool item3found = false;
ItemType item3(3);
unsortedType.InsertItem(item3);
unsortedType.RetireveItem(item3, item3found);
bool item2found = false;
ItemType item2(2);
unsortedType.RetireveItem(item2, item2found);
プログラムをデバッグしている間、私は自分自身を見つけ続けます: while (moreToSearch && !found) コードはどの switch ステートメントにも行きません。何か案が?
これは、奇妙な状況での出力です。
Item 1 added successfully.
Item 1 has been retrieved.
Item 3 added successfully.
RUN FAILED (exit value 1, total time: 1s)
どんな助けも大いに充当します、私はそれを失いかけています!