Вот комбинация голосового ответа с обходным путем для столкновений Chrome :
generateGUID = (typeof(window.crypto) != 'undefined' &&
typeof(window.crypto.getRandomValues) != 'undefined') ?
function() {
// If we have a cryptographically secure PRNG, use that
// https://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript
var buf = new Uint16Array(8);
window.crypto.getRandomValues(buf);
var S4 = function(num) {
var ret = num.toString(16);
while(ret.length < 4){
ret = "0"+ret;
}
return ret;
};
return (S4(buf[0])+S4(buf[1])+"-"+S4(buf[2])+"-"+S4(buf[3])+"-"+S4(buf[4])+"-"+S4(buf[5])+S4(buf[6])+S4(buf[7]));
}
:
function() {
// Otherwise, just use Math.random
// https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
};
В jsbin , если вы хотите проверить его.
Как я понимаю, ваша проблема в том, что простые массивы не имеют переменного размера, то есть, если они установлены на определенную длину, новые значения не могут быть введены.
Пример: если у вас есть массив длины 4, вы не можете хранить что-либо с индексом 4 или выше.
Мой предпочтительный способ решения этой проблемы - использование ArrayLists.
Но вы также можете каждый раз создавать новый массив:
//stores history
if(choice != 4){
String temp = new String[hist.length];
for(int x = 0; x < hist.length; x++){
temp[x] = hist[x];
}
temp[hist.length] = menu[choice - 1];
hist = temp;
}
Вы также, вероятно, должны сделать это, если (choice < 4) {... Так как это проверит, если выбор меньше 4 и не, если это просто не 4.