[英]Can't figure out how to use getNewArrayFrom method with Scanner input?
[英]Can't figure out how to make method recursive
在我的编程课程中,我必须编写递归函数,但是除了在课堂上给出的理论性问题之外,我无法弄清楚如何用自己的代码来实现。 如果有人可以帮助我,并为我提供从哪里开始的指导,那就太好了!
方法如下:
public boolean hasColumn(Marble m) {
boolean hasColumn = false;
for (int i = 0; i < DIM && hasColumn == false; i++) {
int winCount = 0;
for (int j = 0; j < DIM && hasColumn == false; j++) {
if (j == 0) {
winCount = 1;
} else {
if (getField(j, i).equals(getField(j - 1, i))
&& getField(j, i).equals(m)) {
winCount++;
if (winCount == WINLENGTH) {
hasColumn = true;
}
} else {
winCount = 1;
}
}
if (!(getField(j, i).equals(m))) {
hasColumn = false;
}
}
}
return hasColumn;
}
有一个字段[DIM] [DIM],用于存储大理石。 大理石有一个标记,它是0-4,其中0为空,而1-4为颜色值。 该方法确定某人是否有5的大理石柱并获胜。 输入是玩家的大理石类型。 输出为boolean hasColumn true或false。 输出值正确,没有递归。
这个想法是让它以递归的方式找到一个垂直列。 这也必须在水平/垂直方向上完成,但是当我弄清楚了这个问题后,我会自行处理。
先感谢您!
某些类型的递归和迭代之间存在双重性。
考虑在迭代函数中,您使用两个变量i
和j
在列上进行迭代。 您可以将这些局部变量转换为函数的参数吗? 您将把函数内部的状态(局部变量)转换为函数调用中隐含的状态。
public boolean hasColumn(Marble m, int i, int j, int wincount) {
if (wincount == WINLENGTH)
return true;
if (i == DIM)
return false;
if (j == DIM)
return hasColumn(m, i + 1, 0, 0);
return hasColumn(m, i, j + 1, getField(j, i).equals(m) ? wincount + 1 : 0);
}
根据是否要查找等于给定Marble元素或具有相同值的元素的行/列,可以调用此方法:
hasColumn(aMarble, 0, 0, 0);
hasColumn(getField(0, 0), 0, 0, 0);
任务听起来像:1.我们有一个尺寸为DIM的大理石元素方阵(可以是简单整数)。 2.我们有一个方法getField(int,int)从此矩阵返回大理石。3.我们有一个迭代决策,以确定此矩阵是否有任何具有相等大理石元素值的列。
我们的目标是此方法的写递归变体
所以,看这里。 递归算法检查ROW是否存在相同值:
public class Marble {
public static final int DIM = 10;
public int[][] marbleAr = new int[DIM][DIM];
public void init(){
for(int i=0;i<DIM;i++){
for(int j=0;j<DIM;j++){
marbleAr[i][j] = new Random().nextInt(10);
if(i == 2){
marbleAr[i][j] = 7;
}
}
}
}
public int get(int i, int j){
return marbleAr[i][j];
}
public void printMarbleAr(){
for(int i=0;i<DIM;i++){
for(int j=0;j<DIM;j++){
System.out.print(marbleAr[i][j] + " ");
}
System.out.println();
}
}
public boolean hasColumn(int val, int col, int row){
if(row == 0){
return true;
}
if(this.hasColumn(val, col, row-1)){
if(this.get(col, row) == this.get(col,row-1)){
return true;
}else{
if(col == DIM-1){
return false;
}
return this.hasColumn(val, col+1, row);
}
}
return false;
}
public static void main(String[] args) {
int v = 7;
Marble marble = new Marble();
marble.init();
marble.printMarbleAr();
System.out.println(marble.hasColumn(v, 0, DIM-1));
}
}
hasColumn
,返回变量名称为hasColumn
。 那是坏的 。 hasColumn
再次在方法内部被调用而实际上进入了递归路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.