最后在for循环中打印语句一次?

时间:2017-11-09 00:19:57

标签: java

我有一个带有if语句的for循环,我希望在所有迭代发生后打印语句,但是在每次迭代后都会打印if语句。我希望程序能够完成迭代,无论名字以输入的字母开头,我希望它们用语句打印"姓氏以"开头。 +字母+"是" +学生[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]);

      }
   }

   }
}  

4 个答案:

答案 0 :(得分:0)

您只需在"The last names that start with " + letter + " are "循环之前打印for,然后使用循环打印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
      }
   }

希望这会有所帮助,以及你在寻找什么。

答案 1 :(得分:0)

也许您想要的是以下内容:

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();

这将留下一个尾随的逗号,但可能会让你走上你想去的地方。

答案 2 :(得分:0)

您在知道结果之前打印出输出。

获取结果,然后生成输出。我们需要存储哪些名称是匹配的,并用一个打印出来显示它们。 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));
}

答案 3 :(得分:0)

让我尽量回答你的问题,因为我理解你的问题, 您有两种搜索方式:名称和第一个字母。

首先,如果要执行字符串相等性检查,最好使用.equals或.equals vs .equalsIgnoreCase,以便

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

我将专注于你的问题和答案,只是字母搜索部分。 (因为搜索名称部分也有问题,因为只要找不到名称就会为每次迭代打印else部分)

所以,如果你想打印所有以字母&#39; x&#39;开头的名字。 (让我们假设字母是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);
}