2

初心者 Java プログラマーです。私は3つの文字列を互いに比較しようとしており、システムに2番目/中間の単語を辞書順で吐き出させています。

import java.util.*;

public class Ordered2
{
public static void main(String[] args)
{
    String firstString, secondString, thirdString;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter three different strings.");
    System.out.println("The string in the middle order lexicographically will be displayed.");
    firstString = keyboard.nextLine();
    secondString = keyboard.nextLine();
    thirdString = keyboard.nextLine();

    String topString, middleString, bottomString;

    if (firstString.compareTo(secondString) > 0 && (firstString.compareTo(thirdString) > 0)) 
    { topString = firstString; }
    else if (firstString.compareTo(secondString) < 0 && (firstString.compareTo(thirdString) > 0)) {
    middleString = firstString; }
    else { bottomString = firstString; }

    if (secondString.compareTo(firstString) > 0 && (secondString.compareTo(thirdString) > 0)) {
    topString = secondString; }
    else if (secondString.compareTo(firstString) < 0 && (secondString.compareTo(thirdString) > 0)) {
    middleString = secondString; }
    else { bottomString = secondString; }

    if (thirdString.compareTo(secondString) > 0 && (thirdString.compareTo(firstString) > 0)) {
    topString = thirdString; }
    else if (thirdString.compareTo(secondString) < 0 && (thirdString.compareTo(firstString) > 0)) {
    middleString = thirdString; }
    else { bottomString = thirdString; }

    System.out.println("The second string in lexicographic order: " + middleString);
    }
}

これはコンパイルされず、middleString が初期化されていないことがわかります。どんな助けでも大歓迎です。

4

5 に答える 5

4

ifJava コンパイラーは、ステートメントのどのブランチが実行されるかを知りません。つまり、あるブランチで変数を初期化し、他のブランチでは初期化しない場合、その変数に値が割り当てられているとは限りません。あなたのコードでは、もちろんすべての変数が初期化されますが、コンパイラはこれを知る方法がないため、エラーになります。null3つをまたは空の文字列に初期化するだけです。String topString, middleString, bottomString;と置き換えます

String topString = null;
String middleString = null;
String bottomString = null;

さらに、Java の組み込みの並べ替え機能を使用して、並べ替えを行うことができます。

import java.util.*;

public class Ordered2
{
public static void main(String[] args)
{
    String firstString, secondString, thirdString;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter three different strings.");
    System.out.println("The string in the middle order lexicographically will be displayed.");
    firstString = keyboard.nextLine();
    secondString = keyboard.nextLine();
    thirdString = keyboard.nextLine();

    String[] array = new String[] {firstString, secondString, thirdString};

    Arrays.sort(array);

    System.out.println("The second string in lexicographic order: " + array[1]);
}
}

Arrays.sort()文字列をソートします。ソートされた配列から 2 番目 (インデックス 1) の文字列を取得すると、中央の文字列が得られます。大文字と小文字を区別しない順序で並べ替えたい場合は、 を使用できますArrays.sort(array, String.CASE_INSENSITIVE_ORDER)

于 2014-01-30T19:08:51.480 に答える
0

私があなたのシナリオを理解していれば、あなたは文字列にのみ興味があります。文字列の自然順序を利用し、JDK クラスを使用して支援することができます。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class StringSorter {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("Enter the FIRST string:");
    String first = scanner.nextLine();
    System.out.println("Enter the SECOND string:");
    String second = scanner.nextLine();
    System.out.println("Enter the THIRD string:");
    String third = scanner.nextLine();

    List<String> strings = new ArrayList<String>();

    strings.add(first);
    strings.add(second);
    strings.add(third);

    System.out.println("Before sort:");
    for (String s : strings) {
      System.out.println(s);
    }

    Collections.sort(strings);

    System.out.println("After sort:");
    for (String s : strings) {
      System.out.println(s);
    }

    System.out.println("The Middle String is '" + strings.get(1) + "'");

    scanner.close();

  }

}

名前として John、JOHN、および Kevin を使用して、これを Eclipse で実行したとき (さあ、貼り付けて試してみてください!)、次の結果が得られました。

Enter the FIRST string:
John
Enter the SECOND string:
JOHN
Enter the THIRD string:
Kevin
Before sort:
John
JOHN
Kevin
After sort:
JOHN
John
Kevin
The Middle String is 'John'
于 2014-01-30T19:35:56.017 に答える
0

変数middleStringを初期化しておらず、pgrm の最後で次のように使用しています。

System.out.println("The second string in lexicographic order: " + middleString);

以下のように変数を簡単に初期化すると、コンパイルされます。

String  middleString ="";
于 2014-01-30T19:04:53.857 に答える
0

次のように、3 つの文字列 topString、middleString、bottomString を空に初期化するだけです。

String topString = "";
String middleString = "";
String bottomString = "";

コンパイルする必要があります。

于 2014-01-30T19:05:00.170 に答える