-4

ユーザーにチューター名のリストを入力させるプログラムを作成する必要があります。ピアチューターは 10 人までしか雇うことができません。次に、プログラムは姓のアルファベット順に並べられたリストに基づいて、それぞれの名前を表示します。これは私がこれまでに持っているものです。私は何時間も配列をソートする方法を考えてきましたが、それを理解できないようです。同じ過ちを繰り返さないように、誰かが私が間違っていることを簡単な言葉で説明してくれれば、ありがたいです。

ここに私が得ているエラーがあります:

 errors: PeerTutorReport.java:11: error: method tutorNames in class PeerTutorReport cannot be applied to       given types;
    int[] numTutors = tutorNames();
                      ^
required: int
found: no arguments
reason: actual and formal argument lists differ in length
PeerTutorReport.java:46: error: cannot find symbol
    String[] listNames = new String[numTutor];
                                    ^
 symbol:   variable numTutor
 location: class PeerTutorReport
  PeerTutorReport.java:48: error: cannot find symbol
    for (x = 0; x <= listNames.length; x++) {
         ^
  symbol:   variable x
 location: class PeerTutorReport
  PeerTutorReport.java:48: error: cannot find symbol
    for (x = 0; x <= listNames.length; x++) {
                ^
 symbol:   variable x
 location: class PeerTutorReport
 PeerTutorReport.java:48: error: cannot find symbol
    for (x = 0; x <= listNames.length; x++) {
                                       ^
 symbol:   variable x
  location: class PeerTutorReport
 PeerTutorReport.java:49: error: cannot find symbol
    numTutors[x] = JOptionPane.showMessageDialog(" Tutor LAST NAME and FIRST NAME Listed in              Alphabetically Order"+(x+1)+ " " + "For example: 'Smith, John'");
              ^

これが私のコードです。最初の方法は問題なく動作しますが、2 番目の方法では問題が発生します。

import javax.swing.JOptionPane;
import java.util.Arrays;


public class PeerTutorReport {
    public static void main(String[] args) {
        String[] listNames = getTutorNames();
        int[] numTutors = tutorNames();
    }

    public static String[] getTutorNames() {
        String firstName;
        String lastName;
        String[] listNames = new String[10];

        for (int x = 0; x < listNames.length; x++) {
            firstName = JOptionPane.showInputDialog(null, "Enter Tutor's First Name: ");
            lastName = JOptionPane.showInputDialog(null, "Enter Tutor's Last Name: ");
            listNames[x] = lastName + ", " + firstName;
        }
        return listNames;
    }

    public static String[] tutorNames(int numTutors) {
        String[] listNames = new String[numTutor];

        for (x = 0; x <= listNames.length; x++) {
            numTutors[x] = JOptionPane.showMessageDialog(
                    "Tutor LAST NAME and FIRST  NAME Listed in Alphabetically Order"
                            + (x + 1) + " " + "For example: 'Smith, John'");
            Arrays.sort(listNames);
        }
        return listNames;
    }
}
4

4 に答える 4

4

main編集:メソッドも見てみましょう:

public static void main(String[] args) {
    String[] listNames = getTutorNames();
    int[] numTutors = tutorNames();
}
  • で取得した名前を使用していませんgetTutorNames。それらを他のものに渡すつもりがないのに、なぜそれらを求めるのですか?
  • tutorNamesメソッドにはパラメーターintがありますが、引数を渡していません
  • メソッドはtutorNamesを返すように宣言されていますが、結果を変数String[]に代入しようとしています。int[]

これらの問題はいずれもソートと関係がないことに注意してください。ソートよりもはるかに基本的な問題です。立ち止まって、すべてのコードをよく見ることをお勧めします。


編集:さて、他の方法を見てみましょう:

public static String[] tutorNames(int numTutors) {
    String[] listNames = new String[numTutor];

    for (x = 0; x <= listNames.length; x++) {
        numTutors[x] = JOptionPane.showMessageDialog("...");    
        Arrays.sort(listNames);
    }
    return listNames;
 }   

であるnumTutors[x]にもかかわらず、に割り当てようとしています。それはうまくいきません。どちらも変数が存在しないためです。numTutorsintnew String[numTutor]numTutor

また、反復ごとに配列 (データが取り込まれない) をソートしています...なぜですか?


編集:質問が修正される前にこの回答を書きました...

さて、最初の問題は次のとおりです。

for (int x = 0; x < listNames.length; x++) {
    firstName = JOptionPane.showInputDialog(null, "Enter Tutor's First Name: ");
    lastName = JOptionPane.showInputDialog(null, "Enter Tutor's Last Name: ");
}

10 組の名前を要求していますが、毎回変数firstNameandに格納するだけです。lastNameあなたのlistNames変数は決して触れられません。おそらく次のようなものが必要です。

for (int x = 0; x < listNames.length; x++) {
    String firstName = JOptionPane.showInputDialog(null, "Enter Tutor's First Name: ");
    String lastName = JOptionPane.showInputDialog(null, "Enter Tutor's Last Name: ");
    listNames[x] = lastName + ", " + firstName;
}

変数宣言をループ内とループ内にどのように移動したかに注意してfirstNameくださいlastName。いずれにせよ、ループ外でそれらを使用するわけではないので、以前に宣言してもメリットはありません。一般に、ローカル変数のスコープをできる限り制限することをお勧めします。

または、チューターごとに 1 つの名前を尋ねるだけです。

for (int x = 0; x < listNames.length; x++) {
    listNames[x] = JOptionPane.showInputDialog(null, "Enter Tutor's Name: ");
}
于 2013-04-05T19:32:14.540 に答える
0

tutorNames 関数の戻り値の型は文字列配列のように見えますが、main() で int 配列変数に割り当てようとしています。

于 2013-04-05T19:34:42.130 に答える
0

私はint[] numTutors = tutorNames()線を理解できないので、これをそこに捨てていますが、次のことを試してください

public static void main(String[] args) {


    String[] listNames = getTutorNames();
    Arrays.sort(listNames);
    for(int i=0; i<listNames.length; i++)
    {
        JOptionPane.showMessageDialog(listNames[i]);
    }
}

が正しく実行されたと仮定するとString[] listNames = getTutorNames();、名前が正しくソートされるはずです。それらを表示します。

于 2013-04-05T19:59:26.230 に答える