Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符串中的颜色之间旋转_Java_String_Algorithm_Colors - Fatal编程技术网

Java 在字符串中的颜色之间旋转

Java 在字符串中的颜色之间旋转,java,string,algorithm,colors,Java,String,Algorithm,Colors,我正在尝试创建一个旋转颜色的字符串。每个字母都有不同的颜色,它们需要以线性方式旋转。文本将进入JLabel的内部 我构建了文本,以便在给定一个单词和一组颜色(字符串)的情况下创建它 String[]colors={“白色”、“蓝色”、“红色”}; 字符串word=“foo”; 字符串彩色文本; String[]字母=word.split((?!^)”//将文本拆分为独立文本。信件 coloredText=“”; for(int i=0,j=0;i=colors.length) j=0; colo

我正在尝试创建一个旋转颜色的
字符串。每个字母都有不同的
颜色
,它们需要以线性方式旋转。文本将进入
JLabel
的内部

我构建了文本,以便在给定一个单词和一组颜色(字符串)的情况下创建它

String[]colors={“白色”、“蓝色”、“红色”};
字符串word=“foo”;
字符串彩色文本;
String[]字母=word.split((?!^)”//将文本拆分为独立文本。信件
coloredText=“”;
for(int i=0,j=0;i=colors.length)
j=0;
coloredText+=String.format(“%s”,颜色[j],字母[i]);
}
彩色文本+=“”;
这将导致一个字符串的foo带有白色的
F
、蓝色的
O
和红色的final
O

当然,如果颜色比字母少,它们就会继续旋转

现在我有了一个
定时器
来旋转颜色,但我想不出执行该操作的
算法。
基本上,每种颜色都应该取代下一种颜色,最后一种颜色取代第一种颜色

例如:

当然,这必须适用于任意数量的给定字母和颜色,不适合的颜色将被忽略。(一个由3个字母和10种颜色组成的单词将只使用前3种颜色)

我尝试过使用
.replace()
,但是
regex
对我来说有点太难了


有什么想法吗?

您可以在0和colors.length-1之间添加一个整数(类或实例变量,取决于您的代码)作为偏移计数器

int offset = 0
每次计时器执行时,将偏移量增加1,并检查偏移量是否超出允许的偏移量。如果是,请将其重置为0

void onTimerExecutes(){
    offset++;
    if (offset >= colors.length)
        offset = 0;
    applyColorsToText();
}
然后将偏移量添加到
j

j = offset;
for(int i = 0, i < letters.length; i++, j++)
j=偏移量;
对于(int i=0,i
您可以在0和colors.length-1之间添加一个整数(类或实例变量,具体取决于您的代码)作为偏移计数器

int offset = 0
每次计时器执行时,将偏移量增加1,并检查偏移量是否超出允许的偏移量。如果是,请将其重置为0

void onTimerExecutes(){
    offset++;
    if (offset >= colors.length)
        offset = 0;
    applyColorsToText();
}
然后将偏移量添加到
j

j = offset;
for(int i = 0, i < letters.length; i++, j++)
j=偏移量;
对于(int i=0,i
或者,如果不将偏移量重置为0,而是使用模运算符对数组进行索引,则可以跳过一些行。看

所以你应该

void onTimerExecutes(){
offset++;
applyColorsToText();
}
在for循环中

            coloredText += String.format("<font color='%s'> %s </font>",    colors[offset%colors.length], letters[i]);
和使用,因此:

coloredText+=String.format(“%s”,颜色[Math.floorMod(offset,colors.length)],字母[i]);

或者,如果不将偏移量重置为0,而是使用模运算符对数组进行索引,则可以跳过一些行。看

所以你应该

void onTimerExecutes(){
offset++;
applyColorsToText();
}
在for循环中

            coloredText += String.format("<font color='%s'> %s </font>",    colors[offset%colors.length], letters[i]);
和使用,因此:

coloredText+=String.format(“%s”,颜色[Math.floorMod(offset,colors.length)],字母[i]);

保留字段中第一个字母所用颜色的索引,并在每次为字符串着色时将其递减。如果达到-1,则将其重置为最后一个索引。第一轮是0,所以你以WBR结束。然后你减少它。因为它变成了-1,所以您将它设置为2,最终得到的是RWB。然后将其递减,最后得到BRW。在字段中保留用于第一个字母的颜色索引,并在每次为字符串着色时将其递减。如果达到-1,则将其重置为最后一个索引。第一轮是0,所以你以WBR结束。然后你减少它。因为它变成了-1,所以您将它设置为2,最终得到的是RWB。然后减小它,最后得到BRW。应减小偏移量以按OP所需的方式旋转偏移量应减小以按OP所需的方式旋转