我的代码目前看起来像这样
public void method() {
while (a condition) {
if() {
//something
} else {
//something
}
}
//I have a code here which I want to execute only once
}
答案 0 :(得分:1)
方法1 - 使用const CORRIDOR = 0;
const WALL = 1;
const EXIT = 2;
// board - 2D array
// start - [row, column] location of start point
function findPath(board, start) {
let seenPath = new Set();
findPathRecur(board, start, seenPath)
return Array.from(seenPath);
}
function findPathRecur(board, point, seenPath) {
let row = point[0],
column = point[1];
// Base Case
if (!isValidPathPoint(board, point, seenPath)) {
return false;
}
if (board[row][column] === EXIT) {
seenPath.add(point.toString());
return true;
}
// console.log("Curr -", point, ", Seen -", Array.from(seenPath));
seenPath.add(point.toString());
let leftColumn = [row, column - 1],
rightColumn = [row, column + 1],
topRow = [row - 1, column],
bottomRow = [row + 1, column];
if (findPathRecur(board, leftColumn, seenPath)) {
return true;
}
if (findPathRecur(board, rightColumn, seenPath)) {
return true;
}
if (findPathRecur(board, topRow, seenPath)) {
return true;
}
if (findPathRecur(board, bottomRow, seenPath)) {
return true;
}
seenPath.delete(point.toString());
return false;
}
// Check if the point is on valid path
function isValidPathPoint(board, point, seenPath) {
let row = point[0];
let column = point[1];
// Check if point exists
if (board[row] != null && board[row][column] != null) {
// To avoid cycle
if (!seenPath.has(point.toString())) {
// Not a Wall
if (board[row][column] !== WALL) {
return true;
}
}
}
return false;
}
// Test Program
let maze = [
[1, 1, 1],
[0, 0, 1],
[1, 2, 1]
];
let testStart = [
[1,0],
[1,1],
[2,1],
[0,0],
[5,5]
];
testStart.forEach(function(start, i) {
console.log("Test Case:",i);
console.log("\tStart -", start, "Path -", findPath(maze, start));
})
标志:
boolean
方法2 - 将private boolean first = true;
public void method() {
while (a condition) {
if() {
//something
} else {
//something
}
}
if (first) {
//I have a code here which I want to execute only once
first = false;
}
}
参数传递给此方法:
boolean
答案 1 :(得分:0)
简单的方法是使用布尔标志!
if (flag)
{
//I have a code here which I want to execute only once
flag = false;
}
答案 2 :(得分:0)
我们可以通过使用一个简单的布尔标志来实现这一点,如下面的一个简单示例所示。我已对每一行进行了评论,以便您了解为何以这种方式完成。希望您发现此代码段有用。
public void method(){
boolean alreadyRun = false; //<--Declare a boolean outside the while loop as false
int i = 1; //a variable which will drive the odd-even printer
while(i <= 5){ //Nothing special here, just a normal while loop
if(i % 2 == 0){ //loop logic in this case checking even-odd
System.out.println("I am even");
}else{
System.out.println("I am odd");
}
i++;//loop counter increment which is also normal
if(!alreadyRun){ //this is where the magic happens, you check if the value of alreadyRun is false or not
//if false then execute the print statement below and then also set the alreadyRun
//variable to true so on the next loop iteration, the value will be true and
//the if body will be skipped which is the thing you want
System.out.println("You get to see me only once"); //A statement that prints only once
alreadyRun = true; //setting the boolean to true to bar the execution of this if body over the next iterations of the while loop
}
}
}