Thanks to every body whom gives me advices for the solution

@Mihai.....i really appreciate for your detail explanation and
solution.......its a great lesson for me  as beginner.

God bless you.


On Sun, Aug 15, 2010 at 12:26 PM, Mihai DINCA <mihai.di...@free.fr> wrote:

>  Hi Mesfn
>
> There is a problem in the organization of the while loop.
>
> First of all, it is not a good practice to relay on the default value of a
> static variable (i). What about if a couple of moth later you have to modify
> your program and run the code in the "main" method twice. Does it means that
> the "while ( i < ...) ..." will start with the latest value of "i"? I would
> rather use a "for" loop (as I can keep all that concerns the counter in a
> place), but a while loop would be as good as long the counter is initialized
> just before.
>
> So:
>
> ...
> *boolean foundName = false; // just before the loop - Ok
> int i = 0; // just before the loop too*
> while ( i < names.length ){ ... }
> ...
>
> Then: your array "names" has 8 elements (names.length is 8), counting from
> 0 to 7 (names[0] is "Beah", names[1] is "Bianca", ..., names[7] is "Ethan").
>
> In your loop "while ( i < names.length ){ i++; ... }", the first thing is
> you increment the counter. That means that for the first iteration, your "i"
> is "0" (less than 8), then you increment it to 1 immediately, then you check
> "names[1]". You never check "names[0]". Also, after checking "names[7]", the
> while condition is still true (7 < 8), so one more iteration is performed,
> "i" is increased to "8" and "names[8]" is checked. Of course, this element
> doesn't exist and generates "Array index out of bounds" error (as the index
> value is bound between 0 and 7 and a value of 8 is currently used).
>
> So, the while loop should look like:
>
> ...
> boolean foundName = false; // just before the loop - Ok
> int i = 0; // just before the loop too
> while ( i < names.length ){
> *    ... // check names[i] and break of found
>     i++; // increment the counter only after the check*
> }
> ...
>
> In the way your loop is written now, it exits anyway after the first check
> (I think it is just one of the versions of your work, modified like this in
> order to avoid the error message). Of course, you will want to loop until
> you find the element or up to the end of the array, which one comes first.
> So, your loop might look like:
>
> ...
> boolean foundName = false; // just before the loop - Ok
> int i = 0; // just before the loop too
> while ( i < names.length ){
> *    // Written like this, foundName will be true if equal
>     // or false if different
>     foundName = names[i].equals( searchName );
>     if ( foundName ) break; // exit if found
> *    i++; // increment the counter only after the check
> }
> if ( foundName ) // This is outside the loop
>     JOptionPane.showMessageDialog(null, searchName + " found Ok");
> else
>     JOptionPane.showMessageDialog(null, searchName + " not found");
> ...
>
> Written like this, your don't really care about the value of the counter
> "i" outside of the loop (you could care in order to displays searchName + "
> found as element" + i). If you don't care, you can simply include the
> "foundName" flag in the while looping criteria:
>
> ...
> boolean foundName = false; // just before the loop - Ok
> int i = 0; // just before the loop too
> while ( i < names.length *&& ! foundName *){ // loop while not found
>     // Written like this, foundName will be true if equal
>     // or false if different
>     foundName = names[i].equals( searchName );
>     i++; // increment the counter only after the check
> }
> if ( foundName )
>     JOptionPane.showMessageDialog(null, searchName + " found Ok");
> else
>     JOptionPane.showMessageDialog(null, searchName + " not found");
> ...
>
>
> Hope it helps
> Mihai
>
> mesfin a écrit :
>
> I have a little problem in this home work which displaying the Correct
> search result ,However it does not display the wrong search result on
> the dialog...I got the following Error When i insert a wrong word in
> to the input dialog.
>
> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
>         at OwnWhileProject.main(OwnWhileProject.java:40)
> Java Result: 1
>
> Any one can  fox the problem,
>
> I appreciate
>
>
>
>
>
>
>
>
> ******************************************//
> ***********************************************
>
> import javax.swing.JOptionPane;
> /**
>  *
>  * @author mesfin
>  */
> public class OwnWhileProject {
>     private static int i;
>
>
>     public OwnWhileProject(){
>     }
>
>     public static void main(String[] args) {
>
>
>          // Declare and initialize String array variable called names.
>
>         String names
> []={"Beah","Bianca","Lance","Belle","Nico","Yza","Gem","Ethan"};
>
>         // This is the search string we are going to use to search the
> array.
>
>          String searchName = JOptionPane.showInputDialog("Enter either
> \"Yza\" or \"noname\"!");
>
>         // Declare and initialize boolean primitive type variable
> calld foundName.
>
>
>         boolean foundName =false;
>
>         while (  i < names.length ) {
>              i++;
>
>             if (names [i ].equals(searchName)){
>                 foundName =true;
>
>
>                 if (foundName)
>                 JOptionPane.showMessageDialog(null, searchName + " is
> found!");
>
>                  else
>                JOptionPane.showMessageDialog(null, searchName + " is
> not found!");
>
>                 break;
>
>             }
>
>                }
>
>
>
>
>
>
>         }
>     }
>
>
>
>


-- 
Mesfin mengesha
Lintukorventie2 F
02660
Espoo

-- 
To post to this group, send email to javaprogrammingwithpassion@googlegroups.com
To unsubscribe from this group, send email to 
javaprogrammingwithpassion+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/javaprogrammingwithpassion?hl=en

Reply via email to