【问题标题】:It only gives one string as the output它只给出一个字符串作为输出
【发布时间】:2020-01-12 03:51:57
【问题描述】:

如果我输入 3 个对象

aakash
12323
aakshit
24r352
rahul
12323

如果我将此作为输入并将搜索字符串输入为“aa”,那么它只会给出与搜索输出匹配的第一个字符串

aakash
12323

为什么不也是个屁

import java.util.Scanner;
import java.io.*;
public class DA_2_searching {
    String name,phone_number;
    Scanner s = new Scanner(System.in);
    DA_2_searching()
    {
        System.out.print("Enter the Details");
        name=s.nextLine();
        phone_number= s.nextLine();
    }
    void search()
    {
       String search;
       search=s.nextLine();
       if(name.startsWith(search))
       {
           System.out.println(name);
           System.out.println(phone_number);

       }
    }
    public static void main(String args[])
    {
        int n;
        Scanner s = new Scanner(System.in);
        n= s.nextInt();
        DA_2_searching obj[]= new DA_2_searching[n];

        for(int i=0;i<n;i++)
        {
            obj[i]= new DA_2_searching();
        }
        for(int i=0;i<n;i++)
        {
            obj[i].search();
        }

    }
}

【问题讨论】:

  • 你试过调试你的程序了吗?
  • 每次调用 search 都使用来自扫描仪的新输入 - 这真的是您想要的吗?
  • obj[i].search();这是问题。它总是在索引 i 处搜索对象。但不是在所有物体上

标签: java arrays string substring startswith


【解决方案1】:

在您当前的代码中,您在每次迭代中都搜索一个字符串。你读入一个字符串并检查这个字符串是否等于 Array[0] 然后你打印它。然后你再次读入一个字符串并检查它是否等于 Array[1]... 等等。您想要的是在整个数组中进行搜索。 一个简单的解决方案是在第二个循环之前读取字符串并传递 字符串进入 search();

void search(String search) {

    if (name.startsWith(search)) {
        System.out.println(name);
        System.out.println(phone_number);

    }
}

public static void main(String args[]) {
    int n;
    Scanner s = new Scanner(System.in);
    n = s.nextInt();
    DA_2_searching obj[] = new DA_2_searching[n];

    for (int i = 0; i < n; i++) {
        obj[i] = new DA_2_searching();
    }
    String search = new String();
    search = s.nextLine();
    for (int i = 0; i < n; i++) {
        obj[i].search(search);
    }
}

【讨论】:

    【解决方案2】:

    问题的原因是,您一次只能搜索一个对象。您调用search() 函数的for 循环一次只比较一个对象 和一个搜索输入。

    在for 循环 中,您只为一个DA_2_searching 对象(索引为i - obj[i] 的对象)调用搜索函数。但是您想搜索您创建的每个DA_2_searching 对象,这意味着您必须重新编写search() 函数,以便它获取所有DA_2_searching 对象并将它们与search-String 进行比较。

    这是我的解决方案:

    import java.util.Scanner;
    public class DA_2_searching {
    
    private String name, phone_number;
    private static DA_2_searching[] allPersons;
    private static Scanner s = new Scanner(System.in);
    
    public DA_2_searching() {
        System.out.println("Enter the Details: ");
        System.out.print("Name: ");
        this.name = s.next();
        System.out.print("Phone-Number: ");
        this.phone_number = s.next();
        System.out.println("\nNext: ");
    }
    
    public static void search() {
        System.out.println("Type a word to search for: ");
        String toSearch = s.next();     
        for(DA_2_searching person : allPersons) {
            if(person.name.contains(toSearch)) { //contains is better for searching.
                System.out.println("Result: " + person.name + " | " + person.phone_number);
            }
        }
        System.out.println("\n");
        if(!toSearch.equals("exit")) {
            search();
        }
    
    }
    public static void main(String args[]) {
        System.out.print("Amount of Entries: ");
        int n = s.nextInt();
        System.out.println("");
        allPersons = new DA_2_searching[n];
        //Creating Persons
        for(int i = 0; i < n; i++) {
            allPersons[i] = new DA_2_searching();
        }
        //initializing search
        search();
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 2022-10-01
      • 2019-11-29
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多