Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 for循环,同时将变量保持在一个范围内_Java_Loops_For Loop_Nested_Iteration - Fatal编程技术网

Java for循环,同时将变量保持在一个范围内

Java for循环,同时将变量保持在一个范围内,java,loops,for-loop,nested,iteration,Java,Loops,For Loop,Nested,Iteration,我试着运行一个双for循环,循环遍历像彩色大正方形(例如300x300)这样的东西,并用一个小正方形(比如100x100)的颜色(或像素)替换它,这就是k和l所代表的 基本上,我想知道如何保持k和l在0-100之间运行,并在达到100后重新启动,但同时保持I和j始终运行。我尝试使用了4个嵌套for循环,但它没有正常工作,虽然我开始认为这可能是一个解决方案,但这将是非常低效的 请让我知道,如果这听起来有点困惑,我会尽力解释得更清楚,谢谢 请原谅我的假代码 for (i=0; i < widt

我试着运行一个双for循环,循环遍历像彩色大正方形(例如300x300)这样的东西,并用一个小正方形(比如100x100)的颜色(或像素)替换它,这就是k和l所代表的

基本上,我想知道如何保持k和l在0-100之间运行,并在达到100后重新启动,但同时保持I和j始终运行。我尝试使用了4个嵌套for循环,但它没有正常工作,虽然我开始认为这可能是一个解决方案,但这将是非常低效的

请让我知道,如果这听起来有点困惑,我会尽力解释得更清楚,谢谢

请原谅我的假代码

for (i=0; i < width; i++)
        for (j=0; i< height; j++)
           set(i, j , pixel(k,l));
(i=0;i 对于(j=0;i可以通过以下方式完成:

for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
      if(k > 100) {
        k = 0;
      }

      if(l > 100) {
        l = 0;
      }

      k++;
      l++;

      set(i, j , pixel(k,l));
    }
}
(i=0;i{ 对于(j=0;j100){ k=0; } 如果(l>100){ l=0; } k++; l++; 设置(i,j,像素(k,l)); } }
问题似乎是将一个图像平铺到另一个图像上。目标图像的尺寸有
width
height
,因此假设
sourceWidth
sourceHeight
是源图像的尺寸(在您的示例中为100 x 100)

要平铺图像,需要
k==i%sourceWidth
l==j%sourceHeight
,以便从源图像读取的像素“环绕”边界。这些应该是。满足这些条件的最简单方法是直接声明它们:

for(int i=0;i
这会执行大量
%
操作,这可能会非常低效,但它为我们提供了一段正确的代码进行转换。如果我们递增
k
l
,则需要两个属性来维护不变量:

  • k
    i
    同时递增;和
    l
    j
    同时递增
  • k
    达到
    sourceWidth
    时,它必须返回到0,对于
    l
    sourceHeight
    也是如此
  • for(int i=0,k=0;i
    注意,循环初始化器和步进器的
    现在为两个循环声明并更新两个变量。这在Java中是允许的

    这可能比执行许多
    %
    操作要快,但请注意,使用
    if
    语句进行分支,因此您可能需要对其进行基准测试以确保其正确性

    在源图像的维数为2的幂的特殊情况下,我们可以通过快速逐位运算获得相同的结果:
    i%sourceWidth
    将等效于
    i&(sourceWidth-1)

    //特殊情况:sourceWidth和sourceHeight是2的幂
    int wMask=sourceWidth-1,hMask=sourceHeight-1;
    对于(int i=0,k=0;i
    您在这里实际要解决的问题是什么;您是将图像平铺到更大的图像上,还是通过最近邻采样调整大小?@kaya3将图像平铺到更大的图像上,因此在本例中,基本上每个较小的图像都是100x100,因此对于300x300,它将是3个图像,3个图像向下。我没有提到“l”必须循环到100,而k=0,k=1也是如此,类似于嵌套for循环,这也是我尝试过的,但无法正常工作。谢谢!我试图实现一些类似于您编写的第二个代码的东西,但它没有正常工作,但在阅读您的回复后,我能够理解它,非常感谢。