la clasificación rápida de Java, la lectura de un archivo de entrada del usuario en una matriz (que ser resuelto)

StackOverflow https://stackoverflow.com/questions/1684215

  •  18-09-2019
  •  | 
  •  

Pregunta

¿Qué hay de nuevo todos ustedes,

Estoy tratando de escribir algo de código en Java que leerá en el número de un archivo (una # en cada línea del archivo .txt) ponerlos en una matriz, y luego ejecutar ordenación rápida en la matriz. Eclipse está mostrando un poco de color rojo que estoy teniendo problemas con el. Mis errores están marcados con los comentarios, y lo que es el error, si alguien puede ayudar a conseguir esto para ejecutar, gracias a todos!

-Kyle

OK, he actualizado con las dos primeras respuestas, Gracias hasta ahora, pero dos errores más Im no comprender realmente.

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


public class Lab3 {

public static void main(String[] args) throws IOException{


    System.out.print("Name of file with array: ");
    Scanner readIn = new Scanner(System.in);
    String input=readIn.nextLine();}
**testScan1(input);** //Return Type for method is missing (but I am trying to call the method here)


public static void testScan1(String filename)

{
    File file = new File(filename);
    Scanner scan;
    int [] array = new int[5];
    try{


        scan = new Scanner( file );
    }
    catch ( java.io.FileNotFoundException e )
    {
        System.out.println( "couldn't open. file not found "  );
        return;
    }
    while(scan.hasNext())
    {
        for( int i = 0; i <= file.length(); ++i)
        {

            **array[i]=scan.next();** /*Type mismatch, cannot convert from sting to int. (I moved the declaration about try?)*/




        }

        int partition(int arr[], int left, int right)
        {
            int i=left; int j = right;
            int tmp;
            int pivot = arr[(left+right)/2];
            while (i<=j){
                while(arr[i]<pivot)
                    i++;
                while (arr[j]>pivot)
                    j--;
                if (i<=j){
                    tmp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=tmp;
                    i++; j--;
                }
            }
            return i;
        }
        void quickSort(int arr[], int left, int right){
            int index = partition(arr, left, right);
            if (left<index-1);
            quickSort(arr, left, index-1);
            if (index<right)
                quickSort(arr, index, right);
        }
    }
¿Fue útil?

Solución

Algunos errores:

  • public testScan1(String filename) en realidad no tiene ningún tipo de retorno y también se llama desde un contexto estático, pero no es estática. Se debe cambiarse a public static void testScan1(String filename).
  • ¿cuál es el propósito de file.hasNext()? Por supuesto que no existe, ya que no quiere decir nada. Creo que quería decir scan.hasNext().
  • array no se puede encontrar porque está definido dentro de un bloque try/catch por lo que es presente sólo dentro de ese ámbito. Mueva la definición antes de intentarlo.

Además de tratar de sangrar código de una manera más fácil de leer, porque es muy difícil encontrar errores. Por ejemplo por qué hay una } Brack antes de la llamada de testScan que cae fuera del método principal de la que supongo que quieres llamarlo?

Otros consejos

Cada vez que usted está tratando con un algoritmo recursivo y se obtiene un desbordamiento de pila, es porque el algoritmo no tiene un caso borde claramente definido que hará que su recursividad para terminar. (O su entrada es demasiado grande, pero eso es raramente el caso, y no es el caso aquí.)

Usted debe mirar su método de quickSort() para ver qué podría estar haciendo que llama a sí mismo infinitamente. Piense de mirar a una reflexión con dos espejos, donde el reflejo rebota de la otra reflexión y sale hacia el infinito ... eso es lo que está pasando aquí.

Además, en el lenguaje Java, se recomienda comenzar siempre el nombre de la clase con una letra mayúscula. Me gustaría nombrar a su QuickSortHomework clase o algo por el estilo.

Además, es posible que desee leer sobre cómo funciona la declaración if en Java, y cómo se define "bloques". Usted tiene una declaración if cerca de un punto y coma y un par de llaves que probablemente no está haciendo lo que creo que está haciendo.

Sinceramente, estoy haciendo un poco molesto por todos los reposts y reposts aquí.

Esto no es lo que quiere escuchar es, pero siento que está utilizando este sitio como una muleta. Usted no parece estar poniendo en el momento de descifrar por sí mismo lo que está pasando. Esa desconcertante a cabo el proceso, no importa lo doloroso, es donde el verdadero aprendizaje viene.

En este caso, si uno mira hacia arriba lo que significa que el error, y luego se limitó a su ordenación rápida () aplicación Creo que tendría que notar que hay algo muy mal con él, obviamente.

EDIT: si estás pensando "pero I hizo tratar de descifrarlo" ... lo que realmente ayuda a incluir en su puesto ", pensé que podría ser esto, pero que didn 't trabajo, así que pensé que tal vez podría ser ....", etc. la mitad del tiempo se dará cuenta de repente el problema mientras que usted está tratando de hablar a través de él de esta manera. La otra mitad, al menos, vemos que se está tratando.

Como te dije en la matriz pregunta anterior no se puede encontrar porque está todavía en bloque try.

A continuación, para la impresión de que no se puede imprimir directamente una matriz en una forma útil, debe iterar sobre cada elemento e imprimirlo de la siguiente manera:

for (int i = 0; i < array.length; ++i)
     System.out.println(array[i]+" ");

Aquí está:

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

public class sdfs
{
    public static void main(String[] args) throws IOException
    {
        System.out.print("Name of file with array: ");
        Scanner readIn = new Scanner(System.in);
        String input = readIn.nextLine();   
    }

    public static void testScan1(String filename)
    {
        File file = new File(filename);
        Scanner scan;
        int[] array;

        try
        {
            array = new int[5];
            scan = new Scanner(file);
        }
        catch (java.io.FileNotFoundException e)
        {
            System.out.println("couldn't open. file not found ");
            return;
        }
        while (scan.hasNext())
        {
                for (int i = 0; i <= file.length(); ++i)
                {
                    array[i] = Integer.parseInt(scan.next()); 

                    for (int j = 0; j < array.length; ++j)     
                        System.out.println(array[i]+" ");
                }
        }
    }

    int partition(int[] arr, int left, int right)
    {
        int i = left;
        int j = right;
        int tmp;
        int pivot = arr[(left + right) / 2];
        while (i <= j) {
                while (arr[i] < pivot)
                        i++;
                while (arr[j] > pivot)
                        j--;
                if (i <= j) {
                        tmp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = tmp;
                        i++;
                        j--;
                }
        }
        return i;
    }

    void quickSort(int[] arr, int left, int right)
    {
        int index = partition(arr, left, right);
        if (left < (index - 1)) {
                ;
        }
        quickSort(arr, left, index - 1);
        if (index < right) {
                quickSort(arr, index, right);
        }
    }
}

Mira cómo ayuda sangría en el código de lectura ..

Su problema es que testScan1 necesita un tipo de retorno, incluso si ese tipo es nula.

IIRC, no creo que pueda imprimir una matriz y ver todos los valores, como se hace en Python o Scala. Vas a tener que recorrer la matriz para imprimir los valores:

for (int i = 0; i < array.length; i++) {
   System.out.println(array[i]);
}

Existen dos problemas. Es necesario definir la matriz fuera del bloque try. De esta manera:

 int[] array = new int[5];
 Scanner scan;
 try {
    scan = new Scanner(file);
 } catch (java.io.FileNotFoundException e) {
      //etc.

A pesar de que en realidad sólo funciona porque regresa en el bloque de excepción, de lo contrario el compilador se quejan de que es posible que una excepción fue arrojado y scan nunca fue asignado.

Para imprimir, uso System.out.println(java.util.Arrays.toString(array));

Eso hará que sea en un formato legible. Usted recibirá un poco de basura interna raro (bueno tal vez eso es duro, pero así es como pienso en el comportamiento por defecto) si sólo se imprime el valor toString () de la matriz (que es lo que sucede si usted sólo tiene que pasar a la println método).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top