2012-01-03 6 views
1

私の配列内のIDに基づいてループするdo ... whileループを使用しようとしています。私はdo whileループを使うのにちょっと新しいので、配列に事を組み込む際にいくつか問題があります。関連するコードは次のとおりです。do .... whileステートメントで配列を使用する

String studentId = StringUtils.defaultString(request.getParameter("Student_ID")); 
    String studentId1 = StringUtils.defaultString(request.getParameter("Student_ID1")); 
    String studentId2 = StringUtils.defaultString(request.getParameter("Student_ID2")); 
    String studentId3 = StringUtils.defaultString(request.getParameter("Student_ID3")); 
    String studentId4 = StringUtils.defaultString(request.getParameter("Student_ID4")); 
    String studentId5 = StringUtils.defaultString(request.getParameter("Student_ID5")); 
    String studentId6 = StringUtils.defaultString(request.getParameter("Student_ID6")); 
    String studentId7 = StringUtils.defaultString(request.getParameter("Student_ID7")); 
    String studentId8 = StringUtils.defaultString(request.getParameter("Student_ID8")); 
    String studentId9 = StringUtils.defaultString(request.getParameter("Student_ID9")); 


    String[] studentArray; 
    studentArray = new String [15]; 
     studentArray[0] = studentId;   studentArray[1] = studentId1; 
     studentArray[2] = studentId2;   studentArray[3] = studentId3; 
     studentArray[4] = studentId4;   studentArray[5] = studentId5; 
     studentArray[6] = studentId6;   studentArray[7] = studentId7; 
     studentArray[8] = studentId8;   studentArray[9] = studentId9; 


do { 
    // blah blah blah 
} while ( // Here is where I want to tell it to loop for every student in my array. It should not run for id's that are empty strings(*if possible)); 

さらに詳しい説明はコメントを参照してください。 StringUtils.defaultStringは、パラメータが取得されたときに使用されます。パラメータが、NULLの場合、空の文字列が返されます。可能であれば、それを考慮に入れて、特定の配列IDが空文字列であるときに "do {}"文を実行しないでください。事前にお手伝いいただき、ありがとうございましたら、お尋ねください。

+1

なぜ特にwhileループ...ん?これは簡単にforeachループで行うことができます – fge

+1

宿題ですか? – alf

+0

ここではforループを使用する方がよいでしょう。 – CoolBeans

答えて

5

これは、より良い各ループのために使用して行われます:

for(String x:studentArray){ 
    // do what you want to do with x 
} 

ちょうどループの先頭であれば、チェックを挿入し、xが空の場合は継続し、NULLの値をスキップします。 enhanced for loopを使用して

+0

+1 'の(null)続行'! – fge

+0

@mak - OPが既に前処理されているため、 'x'はnullにはなりません。 –

+0

@Pangea:ありがとうございます。私の答えを更新しました。 – MAK

4

は簡単です

for(String student: studentArray) 
{ 
    if(!student.equals("")) 
    { 
    //process data 
    } 
} 

注:ザ・条件はまた!"".equals(student)のように書くことができますが、あなたがすでにStringUtils.defaultStringを使用したIDのはnullされることはありません確認しているとして、それはあなたのシナリオでは必要ではない場合

4

do...whileループとwhileループの唯一の違いは、前者が常にであり、常に1回以上実行されていることです。

これを念頭に置いて、このループが少なくとも1回は実行されることを心の奥に保ちながら、標準のwhileループを作成しているかのようにコードを書くことができます。

int i = 0; // Some counter to keep track of the index position 
do { 
    if(!(studentArray[i] == null || studentArray[i] == "")) { 
     // Good stuff here 
    } 
    i++; 
} while(i < studentArray.length); 
+0

配列が空であるかどうかをチェックするのを忘れた。 –

+0

配列を初期化すると、最悪の場合、その基底値は '' 'になります。配列に値を代入すると、最悪の場合、その基底値は 'null'、' 0'、 'false'になります。私は配列が空ではないという前提(そして元のコードの意図)を働かせますが、そうでなければ*絶対に正しい*です。 – Makoto

1
int i = 0; 
if (studentArray.length > 0) { 
    do { 
     doSomethingWithArrayElement(studentArray[i]); 
     i++; 
    } while (i < studentArray.length); 
} 
-1
 string[] arr = new string[4]; // Initialize 
     arr[0] = "one";    // Element 1 
     arr[1] = "two";    // Element 2 
     arr[2] = "three";    // Element 3 
     arr[3] = "four";    // Element 4 

     // Loop over strings 
     foreach (string s in arr) 
     { 
      if (!String.IsNullOrEmpty(s)) 
      { 
       Console.WriteLine(s); 
      } 
     } 

     // do while 
     var aValue = "Not Empty"; 
     do 
     { 
      //loop through elements here 
      for (int a = 0; a < arr.Length; a++) 
      { 
       aValue = arr[a]; 
      } 

     } while (!String.IsNullOrEmpty(aValue)); 
+0

C#は* Javaと同じ*かもしれませんが、*正確に* Javaではありません。それはまた、あなたが 'doのポイントを逃したようだ...while';配列の最後の要素が空の場合は終了しますが、前のステップは終了しません。 – Makoto

関連する問題