0

**これは私の最初の投稿なので、これが正しいかどうかわかりません。しかし、ファイルを読み取ってから、リストを人口の小さいものから大きいものの順に並べる必要があります。私が得るのはアラバマだけで、それは一度しか現れません。私の問題は「for」ステートメントにあると思いますが、よくわかりません。また、「return」ステートメントからのものである可能性もあります。ファイルはこのように設定されています

アラバマ州、4779736
アラスカ州、7102313**

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;     
import java.util.Scanner;

public class Inorder {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
         PrintWriter prw = new PrintWriter("outfile.txt");
                        File f = new File("census2010.txt");
                        if(!f.exists()) {
                            System.out.println( "f does not exist ");
                        }
                        Scanner infile = new Scanner(f);
                        infile.useDelimiter ("[\t|,|\n|\r]+");
                        final int MAX = 50;
                        int [] myarray = new int [MAX];
                        String[] statearray = new String[MAX];
                        int fillsize;


                        fillsize = fillarray (myarray, statearray, infile);

                        printarray (myarray, fillsize, prw);
                        sortarray(myarray, statearray, fillsize);

                    }

                    public static int fillarray (int[] num, String[] states, Scanner infile){


                        for( int count = 0; count < 50; count++){
                              int retcnt = 0;
                                int pop;
                                String state;
                                state = infile.next();
                                pop = infile.nextInt();
                            System.out.println(state + " " + pop + " ");
                            states[retcnt] = state;
                            num[retcnt] = pop;
                            retcnt++;


                        return (retcnt); }

                    }


                    public static void printarray (int[] num, int fillsize, PrintWriter prw){
                        for (int counts = 0; counts < fillsize ; counts++){
                            System.out.println("For the position ["+counts+"] the value is " + num[counts]);
                            prw.println("For the position ["+counts+"] the value is " + num[counts]);
                        }
                        return;
                    }

                    public static void  sortarray(int[] poparray, String[] statearray, int fillsize){

                        for( int fill = 0; fill < fillsize -1; fill = fill+1){
                            for ( int compare = fill+1; compare < fillsize; compare++){
                                if( poparray[compare] < poparray[fill]){

                                    int poptemp = poparray[fill];  
                                    poparray[fill] = poparray[compare]; 
                                    poparray[compare]  = poptemp;
                                // do I need something here?    
                                    String statetemp = statearray[fill];  
                                    statearray[fill] = statearray[compare]; 
                                    statearray[compare]  = statetemp;
                                }
                            }
                        }
                    }
}
4

1 に答える 1

2

return ステートメントを for ループの外に移動するだけでよいようです。

public static int fillarray (int[] num, String[] states, Scanner infile){
    for( int count = 0; count < 50; count++){
        // ...
    } // Finish *all* iterations of the loop, *then* return
    return (retcnt); 
 }

ループ内にをreturn配置することで、最初の反復のみを実行し、メソッドが戻ります (他の 49 回の反復はすべて回避されます)。メソッドでこれを正しく行いますprintarray

編集:

おっしゃったように、return ステートメントをループの外に移動すると、ループにretcntアクセスできなくなります。これは、ループretcnt 内で宣言するためです。ループの前に宣言すればretcnt問題ありません。

int retcnt = 0;
for (//...) {
    //...
}
// The variable retcnt is now accessible for the entire method scope, 
// instead of just the loop block
return retcnt;
于 2013-04-19T21:52:16.257 に答える