簡體   English   中英

最后在for循環中打印一次語句?

[英]Printing statement in for loop once at the end?

我有一個帶if語句的for循環,我希望在所有迭代均發生后打印該語句,但在每次if語句適用的迭代之后打印。 我希望程序進行迭代,無論名稱以輸入的字母開頭,我都希望它們以以下語句打印:“以“ + letter +”開頭的姓是“ + students [i]”,結束,有辦法嗎?

    import java.util.Scanner;

public class ClassNames {

   public static void main(String[] args) {

   Scanner keyboard = new Scanner(System.in);

   int numberOfStudents;
   int i;

   System.out.print("Please enter the total number of students: ");
   numberOfStudents = Integer.valueOf(keyboard.next());

   String students[] = new String[numberOfStudents];

   i = 0;
   while(i < numberOfStudents) {
      System.out.print("Enter the last name: ");
      students[i] = keyboard.next();
      i++;
   }   

   String findName;
   System.out.print("Enter a name to search for: ");
   findName = keyboard.next();


   for(i = 0; i < numberOfStudents; i++) {

      if(students[i].contains(findName)) {
      System.out.println(findName + " is at index " + i);
      }
       else {
      System.out.println("That name does not exist ");
      break;
      }
   } 

   String letter;

   System.out.print("Enter a letter to search on: ");
   letter = keyboard.next();

   for(i = 0; i < numberOfStudents; i++) {

      if(students[i].startsWith(letter)) {
         System.out.println("The last names that start with " + letter + " are " + students[i]);

      }
   }

   }
}  

您可以在for循環之前打印"The last names that start with " + letter + " are "然后使用循環打印student姓名。

System.out.println("The last names that start with " + letter + " are ");
for(i = 0; i < numberOfStudents; i++) {
      if(students[i].startsWith(letter)) {
         System.out.print(students[i] + ","); // Comma to separate student names
      }
   }

希望這對您有所幫助。

您可能想要以下內容:

System.out.print("The last names that start with " + letter + " are ");
for (i = 0; i < numberOfStudents; i++) {
   if (students[i].startsWith(letter)) {
      System.out.print(students[i] + ", ");
   }
}
System.out.println();

這會給您留下逗號結尾,但可能會讓您踏上想要成為的道路。

您將在知道結果之前打印輸出。

獲取結果,然后生成輸出。 我們需要存儲匹配的名稱,並打印出它們以顯示它們。 ArrayList可以很好地實現此目的,因為在完成循環之前,我們不知道有多少個名字匹配,這比創建一個數組的大小可能會太大或太小要好。

List<String> matchesFound = new ArrayList<>();
for (i = 0; i < numberOfStudents; i++) {
    if (students[i].startsWith(letter)) {
        matchesFound.add(students[i]);
    }
}

if (!matchesFound.isEmpty()) {
    System.out.printf("The last name(s) that starts with %s %s %s.", letter,
         matchesFound.size() > 1 ? "are" : "is", String.join(", ", matchesFound));
}

讓我嘗試盡我所能回答您的問題,您有兩種搜索方式:名稱搜索和首字母搜索。

首先,如果要執行字符串相等性檢查,最好使用.equals或.equals與.equalsIgnoreCase,這樣

if(students[i].equals(findName))

我將僅針對字母搜索部分關注您的問題和答案。 (因為搜索名稱部分也是有問題的,因為只要找不到名稱,它將在每次迭代中打印else部分)

因此,如果要打印以字母“ x”開頭的所有名稱(假設字母為x),則首先打印所有名稱,並在找到匹配項時進行保存。 您可以使用其他集合來保存這些名稱。 您可以將ArrayList用於此特定目的。

  String letter;
   ArrayList<String> matches = new ArraList<String>();
   System.out.print("Enter a letter to search on: ");
   letter = keyboard.next();

   for(i = 0; i < numberOfStudents; i++) {

      if(students[i].startsWith(letter)) {
         matches.add(students[i]);

      }
   }
String names = "";
if(!matches.isEmpty)
{
  for(String name : matches)
  { 
    names += name + " "; 
 }
 System.out.println("The last names that start with " + letter + " are " + 
    names);
}

暫無
暫無

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

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