簡體   English   中英

While循環JOptionPane問題

[英]While loop JOptionPane issues

好的-我知道我已經很接近解決方案了,但是需要朝正確的方向輕推。 我需要用戶單擊“是”,程序需要再次開始詢問問題。

執行后,出現以下錯誤

線程“主”中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:java.lang.String.charAt(未知源)為1,Vowel3.main(Vowel3.java:49)

// java class for Panel I/O
import javax.swing.JOptionPane;

// declaration of the class
public class Vowel33
{

    // declaration of main program
    public static void main(String[] args)
    {

    // objects used to store data
    String input_string = null;
    int a_count = 0;
    int e_count = 0;
    int i_count = 0;
    int o_count = 0;
    int u_count = 0;
    int i = 0;
    int yes = 0;

    // 1. display a descriptive message
    String display_message = "This program asks the user for a sentence,\n" 
        + "searches the sentence for all vowels,\n"
        + "and displays the number of times each"
        + "vowel appears in the sentence";
    JOptionPane.showMessageDialog(null, display_message, "Lab 3 Description", JOptionPane.INFORMATION_MESSAGE);



    // 4. visit each String posotion

     do{

        // 3. input the character string

        input_string = JOptionPane.showInputDialog("Enter the sentence to search");

        // 5.  if position i of String is a vowel
        // 6.  increase the appropriate vowel counter
        if (input_string.charAt(i) == 'a' || input_string.charAt(i) == 'A')
        a_count++;

        else if (input_string.charAt(i) == 'e' || input_string.charAt(i) == 'E')
        e_count++;

        else if (input_string.charAt(i) == 'i' || input_string.charAt(i) == 'I')
        i_count++;

        else if (input_string.charAt(i) == 'o' || input_string.charAt(i) == 'O')
        o_count++;

        else if (input_string.charAt(i) == 'u' || input_string.charAt(i) == 'U')
        u_count++;

        i++;

        String display_message1 = input_string                                      // 7. display the String
        + "\n\n" + "has " + input_string.length() + " characters.\n\n"          // 8. display the number of characters
        + "There are \n" 
        + a_count + " a's,\n"                                                   // 9. disaply the number of each vowel
        + e_count + " e's,\n"
        + i_count + " i's,\n"
        + o_count + " o's, and\n"
        + u_count + " u's.\n\n";

        JOptionPane.showMessageDialog(null, display_message1, "Lab 3 Description", JOptionPane.INFORMATION_MESSAGE);

        yes = JOptionPane.showConfirmDialog(null, "Would you like to enter another string?\n\n", "Extra Credit", JOptionPane.YES_NO_OPTION);

    }   while (i < input_string.length());

            if (i == input_string.length())
            {
                yes = JOptionPane.showConfirmDialog(null, "Would you like to enter another string?\n\n", "Extra Credit", JOptionPane.YES_NO_OPTION);
                if (yes == 1)
                {
                    input_string = JOptionPane.showInputDialog("Enter the sentence to search");
                }
            }






    } // end of main
} // end of the class 

在您的代碼中,您有一個條件,如果yes為0,則仍然可以執行循環。由於從我所見,從不重新定義yes ,因此您基本上有一個無限循環,並且當我退出字符串的邊界時,您的代碼將出錯。長度。

同樣不確定為什么在循環的底部有兩個JOptionPanes(它將執行x次,其中x = input_string.length())

考慮類似:

if(i == input_string.length()) {
    //ask the user if they want to enter another string
    if(the user selected yes){
        yes = 1;
        //instantiate again with new input_string
    }
}

另一個注意事項:假設您要顯示一條消息,詢問用戶是否要在完成對第一個條目的迭代之后再輸入另一個字符串,所以似乎沒有理由要包含yes變量和條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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