0

私はJavaが初めてで、単語をシャッフルして単語を修正するためにこのプログラムを書いています。以下は私のプログラムです。を呼び出した後mix()、word の出力を main 内の team 配列に割り当てられるようにしたいと考えています。

どういうわけか、mix()動作していると言えますが、シャッフル機能にある単語にアクセスできません。私は にいて、mainこれらすべての関数が 内mainにあるので、変数にアクセスできると思いました。私がここで見逃しているアイデアはありますか?

import java.util.Scanner;
import java.io.*;
import java.util.*;

public class Project2
{


    public static void main(String[] args) 
    {


                System.out.println("Select an item from below: \n");
                System.out.println("(1) Mix");
                System.out.println("(2) Solve");
                System.out.println("(3) Quit");


                int input;
                Scanner scan= new Scanner(System.in);
                input = scan.nextInt();

                //System.out.println(input);  
                if(input==1) {
                    mix();
                    System.out.println(word);
                    char team[]=word.toCharArray();
                    for(int i=0;i<team.length;i++){
                        System.out.println("Data at ["+i+"]="+team[i]);
                    }
                }
                else{
                    System.out.println("this is exit");
                    } 
        }




        static void mix()
         {
        String [] lines=new String[1000];//Enough lines.
        int counter=0;
        try{
            File file = new File("input.txt");//The path of the File
            FileReader fileReader1 = new FileReader(file);
            BufferedReader buffer = new BufferedReader(fileReader1);
            boolean flag=true;
            while(true){
                try{
                    lines[counter]=buffer.readLine();//Store a line in the array.
                    if(lines[counter]==null){//If there isn't any more lines.
                        buffer.close();
                        fileReader1.close();
                        break;//Stop reading and close the readers.

                    }
                    //number of lines in the file
                    //lines is the array that holds the line info
                    counter++;

                    }catch(Exception ex){
                        break;
                    }
            }

            }catch(FileNotFoundException ex){
                System.out.println("File not found.");
            }catch(IOException ex){
                System.out.println("Exception ocurred.");
            }


                int pick;
                 Random rand = new Random();
                 pick = rand.nextInt(counter ) + 0;

                System.out.println(lines[pick]);
                ///scramble the word

                shuffle(lines[pick]);


    }

    static void shuffle(String input){
        List<Character> characters = new ArrayList<Character>();
        for(char c:input.toCharArray()){
            characters.add(c);
        }

        StringBuilder output = new StringBuilder(input.length());
        while(characters.size()!=0){
            int randPicker = (int)(Math.random()*characters.size());
            output.append(characters.remove(randPicker));
        }

        String word=output.toString();


    }


  }
4

2 に答える 2

2

return ステートメントを使用して、shuffle() メソッドから文字列値を返します。

static String shuffle(String input) {
     // . . .
     return output.toString();
}

...そしてそれをミックスして使用します:

String word = shuffle(lines[pick]);

ただし、プログラミングの前に基本的な Java チュートリアルを読むことをお勧めします。

于 2013-03-09T18:56:28.390 に答える
1

Javaでは、変数は初期化されたメソッドの外部に表示されません。たとえばint foo = 3;、mainで宣言した後、別のメソッドからアクセスしようとすると、機能fooしません。別の方法の観点からは、foo存在すらしていません!

メソッド間で変数を渡す方法は、return <variable>ステートメントを使用することです。プログラムがreturnステートメントに到達すると、メソッドは終了し、return(おそらくfoo)の後の値が呼び出し元のメソッドに返されます。ただし、そのメソッドを宣言するときは、メソッドが変数を返す(そして、タイプが何であるかを言う)と言う必要があります(voidメソッドが何も返さないときに言う必要があるのと同じです!)。

public static void main(String[] args){
     int foo = 2;
     double(foo); //This will double foo, but the new doubled value will not be accessible
     int twoFoo = double(foo); //Now the doubled value of foo is returned and assigned to the variable twoFoo
}

private static int double(int foo){//Notice the 'int' after 'static'. This tells the program that method double returns an int. 
     //Also, even though this variable is named foo, it is not the same foo
     return foo*2;
}

または、インスタンス変数を使用して、クラス内のすべてのメソッドからアクセスできる変数を作成することもできますが、Javaを初めて使用する場合は、オブジェクト指向プログラミングの基本を学び始めるまで、これらを避ける必要があります。

お役に立てれば!-BritKnight

于 2013-03-09T19:14:32.467 に答える