[英]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.