1

我正在尝试制作一个程序,它可以让我输入 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.");
4

3 回答 3

4

我试图对其进行编程,但我只能用整数来做

不,如果你使用in.next().charAt(0)而不是in.nextInt()from ScannerClass 来采取第一种Character形式,你可以做到这一点String

我不知道如何将其更改为字母/字符?

在这里,您不需要更改它,或者一些regexsplit它,该方法in.next()从输入(最终用途)获取字符串,然后获取charAt(0)第一个。

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

  1. 更改search和数据类型array[]char
  2. 将声明更改array[]array = new char[n]
  3. search将和的输入更改arrayin.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.");
        }
    }
}
于 2013-10-11T22:59:12.510 回答
0

问题在于您的线路array[c] = in.nextInt();Scanner 类nextInt() method的可以读取一个整数,并且只能读取一个整数

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

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

于 2013-10-11T22:57:54.743 回答
0

这是一个更简单的方法,使用 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() 方法的作用与您的函数大致相同,但它更快更容易(因为您实际上不需要编写代码)。

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

于 2013-10-11T23:09:45.880 回答