2011-05-08 111 views
2

我试图增加一些数组值:递增数组值 - 的Arduino

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

如果数字的位置0的值达到25,然后在1位的值被加1,并且位置0重置为0.依此类推 - 当索引位置2达到25时,它将位置3增加1,并将其自己的值重置为0.

我正在做一些base26增量 - 生成所有字母组合给定数量的字母。理想情况下,我希望这可以无限工作(理论上) - 当最后一个值达到25时,会添加一个新的数组索引。

我正在处理上一个问题涉及的项目 - 可能会清理我“M试图做:Every permutation of the alphabet up to 29 characters?

下面是我在一分钟代码:

// 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; 
} 
+0

对不起,我不知道你这个问题就在这里。 – 2011-05-08 20:10:23

回答

2

没有使用的数据类型比long不再像它需要百年的时间Long.MAX_VALUE多点。

你可以只增加一个长期的,需要将其转换为基础26。

一个简单的方法的long转换为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(); 
}