[英]integer 'K' will not count correctly within for loop. How do I fix this?
我正在為一個班級項目制作 DFA。 我編寫的代碼大部分都是正確的,但我的整數 K 總是返回 0 值。我用這個方法做錯了什么?
public static void give(char[] states, String testString)
{
int k = 0;
for(int i = 0; i < testString.toCharArray().length; i++)
{
System.out.println("i is: " + i);
System.out.println("k is: " + k);
System.out.println("State is: " + states[k] + "\n");
if(states[k] == 'a' && testString.toCharArray()[i] == '0')
{
k = 0;//keeps state at 'a'
}
if(states[k] == 'a' && testString.toCharArray()[i] == '1')
{
k++;
}
//////////////////////////////////////////////////////////
if(states[k] == 'b' && testString.toCharArray()[i] == '0')
{
k++;
}
if(states[k] == 'b' && testString.toCharArray()[i] == '1')
{
k = 0;//resets state to 'a'
}
//////////////////////////////////////////////////////////
if(states[k] == 'c' && testString.toCharArray()[i] == '0')
{
k++;
}
if(states[k] == 'c' && testString.toCharArray()[i] == '1')
{
k = 0;
}
//////////////////////////////////////////////////////////
if(states[k] == 'd' && testString.toCharArray()[i] == '0')
{
k = 0;
}
if(states[k] == 'd' && testString.toCharArray()[i] == '1')
{
k++;
}
//////////////////////////////////////////////////////////
if(states[k] == 'e' && testString.toCharArray()[i] == '0')
{
System.out.println(states[k]);
}
if(states[k] == 'e' && testString.toCharArray()[i] == '1')
{
System.out.println(states[k]);
}
//////////////////////////////////////////////////////////
}
基本上這個方法需要我的狀態數組和一個整數字符串(例如:“1001”)。 它應該將字符串的每個成員作為一個字符,並將其與狀態一起用作下一個輸入。 因此,如果狀態為“a”且輸入為“1”,則狀態應更改為“b”,但這需要我的整數 K 遞增,以便狀態 [k] 變為狀態 [k+1],依此類推. K 一直返回 0,我不知道為什么。 有任何想法嗎? 謝謝!
您進入下一個狀態,在循環(通過字符串)轉彎之前,您嘗試在單個循環中多次更新狀態。 所以解決辦法是加上“continue;” 當你更新 K 時。像這樣:
public static void give(char[] states, String testString)
{
int k = 0;
for(int i = 0; i < testString.toCharArray().length; i++)
{
System.out.println("i is: " + i);
System.out.println("k is: " + k);
System.out.println("State is: " + states[k] + "\n");
if(states[k] == 'a' && testString.toCharArray()[i] == '0')
{
k = 0;//keeps state at 'a'
continue;
}
if(states[k] == 'a' && testString.toCharArray()[i] == '1')
{
k++;
continue;
}
//////////////////////////////////////////////////////////
if(states[k] == 'b' && testString.toCharArray()[i] == '0')
{
k++;
continue;
}
if(states[k] == 'b' && testString.toCharArray()[i] == '1')
{
k = 0;//resets state to 'a'
continue;
}
//////////////////////////////////////////////////////////
if(states[k] == 'c' && testString.toCharArray()[i] == '0')
{
k++;
continue;
}
if(states[k] == 'c' && testString.toCharArray()[i] == '1')
{
k = 0;
continue;
}
//////////////////////////////////////////////////////////
if(states[k] == 'd' && testString.toCharArray()[i] == '0')
{
k = 0;
continue;
}
if(states[k] == 'd' && testString.toCharArray()[i] == '1')
{
k++;
continue;
}
//////////////////////////////////////////////////////////
if(states[k] == 'e' && testString.toCharArray()[i] == '0')
{
System.out.println(states[k]);
continue;
}
if(states[k] == 'e' && testString.toCharArray()[i] == '1')
{
System.out.println(states[k]);
continue;
}
//////////////////////////////////////////////////////////
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.