-1

ユーザーに 10 個の名前を入力し、名前をアルファベット順に並べ替え、それぞれの名前、文字数、母音の数を出力するプログラムを作成する必要があります。私は近いと思いますが、処理中にこのエラーが発生し続けます。誰でもこれを手伝ってもらえますか?

`Exception in thread "Animation Thread" java.lang.NullPointerException
at java.lang.String$CaseInsensitiveComparator.compare(String.java:1217)
at java.lang.String$CaseInsensitiveComparator.compare(String.java:1211)
at java.lang.String.compareToIgnoreCase(String.java:1258)
at test.setup(test.java:35)
at processing.core.PApplet.handleDraw(PApplet.java:2117)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:662)`

私のコードは次のとおりです。

import javax.swing.*;
String names[] = new String[10];
String temp;
String nameInput;
int length;
int vowel = 0;
char ch;
length = 0;
// store user input to array
for (int i = 0; i < names.length; i++) {
  nameInput = JOptionPane.showInputDialog ("Enter a name:");
  names[i] = nameInput;
  length = names[i].length();

// sort into alphabetical order
  for (int j = 0; j < names.length - 1; j++) {
    for (int k = j + 1; k < names.length; k++) {
      if (names[j].compareToIgnoreCase(names[k]) > 0) {
        temp = names[j];
        names[j] = names[k];
        names[k] = temp;
      }
    }
  }
  // count vowels
  char[] characters = nameInput.toCharArray();
  for (int m = 0; m < characters.length; m++) {
    ch = nameInput.charAt(m);

    if ((ch == 'A') || (ch == 'a')
      ||  (ch == 'E') || (ch == 'e')
      ||  (ch == 'I') || (ch == 'i')
      ||  (ch == 'O') || (ch == 'o')
      ||  (ch == 'U') || (ch == 'u')) {
      vowel++;
    }
  }

  System.out.println("Name: " + names[i] + ", Length: " + length + ", Vowels: " + vowel);
  vowel = 0;
}
4

2 に答える 2

3

これが問題です:

for (int i = 0; i < names.length; i++) {
  nameInput = JOptionPane.showInputDialog ("Enter a name:");
  names[i] = nameInput;
  length = names[i].length();

  // sort into alphabetical order
  for (int j = 0; j < names.length - 1; j++) {
    for (int k = j + 1; k < names.length; k++) {
      if (names[j].compareToIgnoreCase(names[k]) > 0) {

名前を入力しているのと同じループでソートしようとしています。

したがって、名を入力した後、最初の要素は null 以外になりますが、他のすべての配列要素は null 参照になります。これが問題の原因です。

これを 2 つの別々のループに分割することをお勧めします。

  1. すべての名前を入力してください
  2. それらを並べ替える

基本的に、最初のループを早めに閉じる必要があります。

for (int i = 0; i < names.length; i++) {
  // No need to use a separate variable: assign directly into the array
  names[i] = JOptionPane.showInputDialog ("Enter a name:");
}
于 2013-02-06T15:06:27.640 に答える
-2

また、文字列配列の構文が間違っています。

String names[] = new String[10];

正しい方法は次のとおりです。

String[] names = new String[10];
于 2013-02-06T15:16:42.533 に答える