Textdatei einlesen im Array (Selection Sort Algorithmus)

KogoroMori21

Aktives Mitglied
Guten Tag liebes Java-Forum,

aktuell habe ich den Selection Sort Algorithmus richtig implementiert, doch ich möchte die Zahlen in der Textdatei sortieren und nicht selbst eingegebene vom Array.
Ich weiß nicht wie ich die Zahlen in der Textdatei einlesen und sortieren kann.

Hiermit funktioniert das super: int[] unsortiert = { 4, 1, 8, -3, 5, 7 }; und er sortiert mir alle Zahlen doch ich möchte die File einlesen.

Und wenn ich den Code ausführe, gibt er Jede Zahl der Textdatei in der Console aus

Mit freundlichen Grüßen und danke für eure Hilfe

Java:
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;

public class SelectionSort {


    private final Scanner consoleScanner;


    public SelectionSort() {
        System.out.println("Hello, Kogo!");
 
        readNumbersFromFile("data_20");

        consoleScanner = new Scanner(System.in);
        readLineFromConsole();
    }


    private void readLineFromConsole() {
      
        int number = consoleScanner.nextInt();
        System.out.println("Zahl: " + number);
    }


    public static void readNumbersFromFile(String fileName) {
        Path path;
        Scanner scanner;
        try {

            path = Paths.get(Objects.requireNonNull(Application.class.getClassLoader().getResource(fileName)).toURI());
            scanner = new Scanner(path, StandardCharsets.UTF_8);

            int elemAnzahl = scanner.nextInt();

            int index = 0;
            while (scanner.hasNextInt()) {
                System.out.println(index + ". Zahl: " + scanner.nextInt());
                ++index;
            }

            scanner.close();
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }

    public static int[] selectionsort(int[] sortieren) {
        for (int i = 0; i < sortieren.length - 1; i++) {
            for (int j = i + 1; j < sortieren.length; j++) {
                if (sortieren[i] > sortieren[j]) {
                    int temp = sortieren[i];
                    sortieren[i] = sortieren[j];
                    sortieren[j] = temp;
                }
            }
        }

        return sortieren;
    }


    public static void main(String[] args) {
        //int[] unsortiert = { 4, 1, 8, -3, 5, 7 };
        int[] unsortiert = readNumbersFromFile("data_20");
        int[] sortiert = selectionsort(unsortiert);


        for (int i = 0; i < sortiert.length; i++) {
            System.out.print(sortiert[i] + ", ");
        }
        new Application();
    }

}
 
Zuletzt bearbeitet:
Deine Methode "readNumbersFromFile" könnte ein Array erzeugen und zurückgeben, also etwa so (ungetestet):
Java:
public static int[] readNumbersFromFile(String fileName) {
  Scanner scanner = ...;
  int elemAnzahl = scanner.nextInt();
  int[] result = new int[elemAnzahl];
  for (int i = 0; i < elemAnzahl; ++i) {
    result[i] = scanner.nextInt();
  }
  return result;
}
 
Ich weiß nicht wie ich die Zahlen in der Textdatei einlesen und sortieren kann.
[CODE lang="java" title="SelectionSort" highlight="25-36, 63-66"]import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Vector;

public class SelectionSort {

public static void printArray(String label, int[] array) {
System.out.println("######## " + label);
for (int i = 0; i < array.length; i++) {
System.out.print(array);
System.out.print(i < array.length - 1 ? ", " : "\n");
}
}

/**
* Reads comma separated file of integer values.
*
* @param fileName
* @return int []
* @throws IOException
*/
public static int[] readNumbersFromFile(String fileName) throws IOException {
Vector<Integer> tmp = new Vector<Integer>();
BufferedReader br = new BufferedReader(new FileReader(new File(fileName)));
String line = null;
while ((line = br.readLine()) != null) {
StringTokenizer tok = new StringTokenizer(line, ",");
while (tok.hasMoreTokens()) {
tmp.add(Integer.parseInt(tok.nextToken()));
}
}
br.close();
return vectorToIntArray(tmp);
}

public static int[] selectionsort(int[] sortieren) {
for (int i = 0; i < sortieren.length - 1; i++) {
for (int j = i + 1; j < sortieren.length; j++) {
if (sortieren > sortieren[j])
swap(sortieren, i, j);
}
}
return sortieren;
}

private static void swap(int[] sortieren, int i, int j) {
int temp = sortieren;
sortieren = sortieren[j];
sortieren[j] = temp;
}

public static int[] vectorToIntArray(Vector<Integer> data) {
int[] values = new int[data.size()];
for (int i = 0; i < values.length; i++)
values = data.get(i);
return values;
}

public static void main(String[] args) throws IOException {
int[] data = readNumbersFromFile("data_20.txt");
printArray("unsortiert", data);
selectionsort(data);
printArray("sortiert", data);
}

}[/CODE]
 
Du solltest trennen:
Im Wesentliche hast du eine Methode int[] selectionsort(int[] sortieren)
Dann kannst du dieser Methode untersciedliche Arrays übergeben. Wie du das machst, ist dein Problem.
 
Zuletzt bearbeitet:

Zurück
Oben