Увеличение значений массива - Arduino - PullRequest
2 голосов
/ 09 мая 2011

Я пытаюсь увеличить некоторые значения массива:

int counter[] = {0,0,0,0,0,0,0,0};

Если значение числа в позиции 0 достигает 25, то значение в позиции 1 увеличивается на 1, а позиция 0 сбрасывается в0. И так далее - когда индексная позиция 2 достигает 25, она увеличивает позицию 3 на 1 и сбрасывает свое собственное значение в 0.

Я делаю некоторое приращение base26 - генерирую все комбинации букв для данногоколичество букв.В идеале я бы хотел, чтобы это работало бесконечно (теоретически) - новый индекс массива добавляется, когда последнее значение достигает 25.

Я работаю над проектом, к которому относится предыдущий вопрос - возможно, прояснитсячто я пытаюсь сделать: Каждая перестановка алфавита до 29 символов?

Вот код, который я имею в минуту:

// Set the variables.
String neologism;
int counter[] = {0,0,0,0,0,0,0,0};
String base26[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};

void setup() {
    // Initialize serial communication:
    Serial.begin(9600);
}

void loop() {
    int i = 0;
    // Reset or increment the counter.
    if (counter[i] == 25) {
        counter[i] = 0;
        counter[i+1]++;
    }
    else {
        counter[i]++;
    }
    neologism = letters(counter[i]);
    Serial.print(neologism+'\n');
    delay(100);
    i++;
    if(i>7) {
        i=0;
    }
}

String letters(int counter) {
    String newword;
    for(int i=0; i <= 7; i++) {
        newword += base26[counter];
    }
    return newword;
}

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Нет особого смысла использовать тип данных длиннее long, так как для достижения Long.MAX_VALUE требуются столетия.

Вы можете просто увеличить long и преобразовать его в базу 26 по мере необходимости.

Простой способ конвертировать положительное длинное в base26 - сделать

 public static String base26(long n) {
     if (n == 0) return "0";
     StringBuilder sb = new StringBuilder();
     while(n > 0) {
         sb.insert(0, (char) ('a' + n % 26));
         n /= 26;
     }
     return sb.toString();
 }
2 голосов
/ 09 мая 2011

Использование класса java.math.BigInteger .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...