netrox
@netrox

Можете помочь разобраться с кодом?

using System;
class FailSoftArray {
int[] a; 
public int Length;  
 
public bool ErrFlag;  
 
public FailSoftArray(int size)
{
    a = new int[size];
    Length = size;
}
 
public int this[int index] 
{
 
get {
        if(ok(index)) {
        ErrFlag = false;
        return a[index];
    } 
    else 
    {
        ErrFlag = true;
        return 0;
    }
}
 
set {
    if(ok(index)) {
    a[index] = value;
    ErrFlag = false;
}
else ErrFlag = true;
}
}
 
private bool ok(int index) {
if(index >= 0 & index < Length) return true;
return false;
}
}
 
class FSDemo {
static void Main() {
    FailSoftArray fs = new FailSoftArray(5);
    int x;
   
    Console.WriteLine("Скрытый сбой.");
    for(int i=0; i < (fs.Length * 2); i++)
    fs[i] = i*10;
    for(int i=0; i < (fs.Length * 2); i++) {
    x = fs[i];
    if(x != -1) Console.Write(x + " ");
}
 
 
 
Console.WriteLine("\nСбой с уведомлением об ошибках.");
for (int i=0; i < (fs.Length * 2); i++) {
//fs[i] = i * 10;
if(fs.ErrFlag)
Console.WriteLine("fs[" + i + "] вне границ");
}
for(int i=0; i < (fs.Length * 2); i++) {
x = fs[i];
if(!fs.ErrFlag) Console.Write(x + " ");
else
Console.WriteLine("fs[" + i + "] вне границ");
}
}
}

Если оставить комментированную строку, то получается неправильный вывод .
89fa9c468dcc4ca2b6cf192fa53547d1.PNG
Каким он должен быть:
9819c18e0c374bc99eaa81d9783b51e9.PNG
Почему это происходит ?
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
Потому что у вас флаг ErrFlag выставляется после присвоения элементу массива значения, грубо говоря, когда выполняется код
fs[i] = i * 10
флаг ErrFlag выставляется в значение true или false в зависимости от того, вышел индекс i за границу массива или нет. Когда вы эту строчку комментируете, ErrFlag сохраняет последнее выставленное ему значение (в вашем случае true)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
netrox
@netrox Автор вопроса
032822642bf44a19947f68ba7b14e714.PNG
Вопрос в этой строке
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы