【问题标题】:Finding letters in an array在数组中查找字母
【发布时间】:2013-10-11 22:53:36
【问题描述】:

我正在尝试制作一个程序,它可以让我输入 10 个字符并将它们存储在一个数组中。 只需单个字符就足够了,例如 (d, s, a, e, h, j, e,)。然后让我使用线性搜索算法查找其中一个字符并给出数组中的位置。

我尝试对其进行编程,但我只能使用整数来实现。 到目前为止,这是我的代码。

不知道怎么改成字母/字符?

public static void main(String args[])

int c, n, search, array[];

Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt(); 
array = new int[n];

System.out.println("Enter " + n + " Letters");

for (c = 0; c < n; c++)
  array[c] = in.nextInt();

System.out.println("What letter do you want to find?");
search = in.nextInt();

for (c = 0; c < n; c++)
{
  if (array[c] == search)     /* Searching element is present */
  {
     System.out.println(search + " is present at location " + (c + 1) + ".");
      break;
  }
if (c == n)  /* Searching element is absent */
  System.out.println(search + " Letter is not found.");

【问题讨论】:

  • 请务必标出对您有帮助的答案,如果您觉得效果最好,请接受。这有助于我们所有人都能找到和使用好的答案。谢谢!

标签: java arrays algorithm linear-search


【解决方案1】:

我试图编程,但我只能用整数来做

不,如果您使用in.next().charAt(0) 而不是Scanner 类中的in.nextInt() 来获取第一个Character 形式String,则可以这样做。

不知道怎么改成字母/字符?

这里不用改,还是有的regex或者split吧,方法in.next()从输入中获取String(最终使用)然后获取charAt(0)第一个.

现在,我在您的代码中所做的更改要按照您上面提到的那样工作:

  1. searcharray[] 更改为char 数据类型。
  2. array[]的声明改为array = new char[n]
  3. searcharray 的输入更改为in.next().charAt(0)

试试这个:

 public static void main(String args[]) {

    int n,c;
    char search,array[];

    Scanner in = new Scanner(System.in);
    System.out.println("Enter number of elements");
     n = in.nextInt();
    array = new char[n];

    System.out.println("Enter " + n + " Letters");

    for ( c = 0; c < n; c++) {
        array[c] = in.next().charAt(0);
    }

    System.out.println("What letter do you want to find?");
    search = in.next().charAt(0);

    for ( c = 0; c < n; c++) {
        if (array[c] == search) /* Searching element is present */ {
            System.out.println(search + " is present at location " + (c + 1) + ".");
            break;
        }
        if (c == n) /* Searching element is absent */ {
            System.out.println(search + " Letter is not found.");
        }
    }
}

【讨论】:

    【解决方案2】:

    问题在于您的array[c] = in.nextInt(); 行。 Scanner classnextInt() method 可以读取整数,并且只能读取整数

    您可以尝试使用array[c] = in.nextLine().charAt(0);,它将从控制台获取任何 输入,将其临时存储为字符串,获取该字符串的第一个字符并存储。您需要对第二个 in.nextInt() 执行相同操作。

    顺便说一句,将char 存储在int 中通常是不好的做法,即使它是有效的Java。例如,我会将csearch 更改为char,并将array 更改为char[]

    【讨论】:

      【解决方案3】:

      这是一个更简单的方法,使用 Java 的内置功能:

      final Scanner in = new Scanner(System.in);
      System.out.println("Please enter a series of characters:");
      final String input = in.next();
      
      System.out.println("What do you want to find?");
      final String search = in.next();
      
      int pos = input.indexOf(search);
      if (pos < 0) {
        System.out.println("No match.");
      } else {
        while (pos >= 0) {
          System.out.println("Found at location: " + pos);
          pos = input.indexOf(search, pos + 1);
        }
      }
      

      区别:

      • 只有实际字符的扫描,因为输入的长度决定了用户实际想输入多少个字符。

      • indexOf() 方法的作用与您的函数大致相同,但它更快、更简单(因为您实际上不需要编写代码)。

      • 这允许用户扫描不止一个字符。如果这不是我们想要的,我会让你自己想办法改变它。 ;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 2016-01-02
        • 2020-03-07
        • 2021-10-04
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多