我的 Java 教科书说你可以使用下面的代码随机打乱任何给定的数组:
for(int i = myList.length-1; i >=0; i--)
{
int j = (int)( Math.random() * (i+1) );
double temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
Run Code Online (Sandbox Code Playgroud)
我编写的以下代码是否同样有效或有效?
for(int i = 0; i < myList.length; i++)
{
int j = (int)( Math.random() * (myList.length) );
double temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
Run Code Online (Sandbox Code Playgroud)
我测试了我的代码,它确实正确地调整了元素。有没有理由在这个算法上使用教科书的算法?
我写了一个简单的程序,它有一个打印变量地址的方法和存储在该地址中的内容,只是为了帮助我更好地理解指针:
#include <iostream>
using std::cout;
using std::endl;
template<typename Type>
void PrintAddressAndContentsOf(Type Variable);
/* Entry point */
int main()
{
int IntegerVariable1 = 5;
int IntegerVariable2 = 6;
double FloatingVariable1 = 10;
double FloatingVariable2 = 11;
PrintAddressAndContentsOf(IntegerVariable1);
PrintAddressAndContentsOf(IntegerVariable2);
PrintAddressAndContentsOf(FloatingVariable1);
PrintAddressAndContentsOf(FloatingVariable2);
}
/* Prints the address and the corresponding contents of a given variable */
template<typename Type>
void PrintAddressAndContentsOf(Type Variable)
{
Type* Pointer = &Variable;
cout << "Address: " << Pointer << endl;
cout << "Contents: " << *Pointer << endl;
} …Run Code Online (Sandbox Code Playgroud) 我已经阅读了有关该主题的所有相关问题,并且我意识到这可能会被标记为重复,但我根本无法弄清楚如何使其发挥作用。
我有这个简单的函数来延迟加载元素:
export default function lazyLoad(targets, onIntersection) {
const observer = new IntersectionObserver((entries, self) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
onIntersection(entry.target);
self.unobserve(entry.target);
}
});
});
document.querySelectorAll(targets).forEach((target) => observer.observe(target));
return observer;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
lazyLoad('.lazy-img', (img) => {
const pictureElement = img.parentElement;
const source = pictureElement.querySelector('.lazy-source');
source.srcset = source.getAttribute('data-srcset');
img.src = img.getAttribute('data-src');
});
Run Code Online (Sandbox Code Playgroud)
现在,我尝试lazyLoad使用 jest 测试该函数,但我显然需要模拟 IntersectionObserver,因为它是一个浏览器 API,而不是本机 JavaScript API。
测试该方法的工作如下observe:
let observe;
let unobserve;
beforeEach(() => {
observe = jest.fn();
unobserve = jest.fn();
window.IntersectionObserver = …Run Code Online (Sandbox Code Playgroud) algorithm ×1
c++ ×1
java ×1
javascript ×1
jestjs ×1
memory ×1
pointers ×1
shuffle ×1
unit-testing ×1