簡體   English   中英

整數 'K' 在 for 循環中不會正確計數。 我該如何解決?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM