Целочисленные JAVA-чтения формируют текстовый файл и работают со списками массивов - PullRequest
0 голосов
/ 09 июня 2011

У меня есть текстовый файл, содержащий следующее содержимое:

0 12
1 15
2 6
3 4
4 3
5 6
6 12
7 8
8 8
9 9
10 13

Я хочу прочитать эти целые числа из txt-файла и сохранить два столбца в два разных массива в Java.

Спасибо aioobe за хороший ответ для первой части .

Теперь я хочу развить это следующим образом:

  1. Напишите метод с именем occurrence, который принимает число в качестве входных данных, и запишите номер вхождения, который имеет это число.

  2. Напишите другой метод с именем occurrences, который нене имеет никаких входных данных, но в качестве выходных данных он дает число, которое имеет наибольшее количество вхождений (во втором столбце) в файле.

  3. Наконец, программа Mainпопросит пользователя написать число от 1 до 3.

1 = метод, который из числа ввода (то есть числа в первом столбце)возвращает связанный номер во втором столбце.

2 = первый метод вхождения (один с вводом)

3 = второй метод вхождения (один без ввода)

Я написал код, но есть некоторые ошибки (о передаче списка массивов вметод), и мне нужна ваша помощь по этому поводу.Я новичок в JAVA, поэтому, если вы считаете, что код не подходит, внесите необходимые изменения.Это мой окончательный код:

import java.util.*; //importing some java classes
import java.lang.*;
import java.io.*;

public class list {

    public static void main(String[] args) {

        // Read the text file and store them into two arrays:
        try {
            List<Integer> column1 = new ArrayList<Integer>();   // Defining an integer Array List
            List<Integer> column2 = new ArrayList<Integer>();   // Defining an integer Array List

            Scanner myfile = new Scanner(new FileReader("c:/java/data.txt")); // Reading file using Scanner

            while (myfile.hasNext()) {          // Read file content using a while loop
                column1.add(myfile.nextInt());      // Store the first integer into the first array list
                column2.add(myfile.nextInt());      // Store the next integer into the second array list
            }

            myfile.close(); // close the file

            System.out.println("column 1 elements are:\n" + column1);  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
            System.out.println("column 2 elements are:\n" + column2);  // [12, 15, 6, 4, 3, 6, 12, 8, 8, 9, 13]

            //Getting a number(1-3) from user:
            Scanner cases = new Scanner(System.in);
            System.out.println("Enter a number between 1-3: "); 
            int num = cases.nextInt();

            switch (num) {
                case 1:
                    Scanner case1 = new Scanner(System.in);
                    System.out.println("Enter a number from first column to see how many occurrences it has: "); 
                    int numb = case1.nextInt();
                    System.out.println(column2.get(numb));
                    break;
                case 2:
                    occurrence(column2.toArray());
                    break;
                case 3:
                    occurrences(column2.toArray());
                    break;              
                default: System.out.println("the number is not 1 or 2 or 3!"); 
            }

        } catch (Exception e) {     // we defined it just in the case of error
            e.printStackTrace();    // shows the error
        }

    } // End of MAIN


    public void occurrence(int[] arg) { // Defining occurrence method

        int count = 0;

        //Getting a number from user input:
        Scanner userin = new Scanner(System.in);
        System.out.println("Enter an integer number: "); 
        int number = userin.nextInt();        

        // Finding the occurrences:
        for (int i = 0; i < arg.length; i++)
            if (arg[i] == number) count++;

        System.out.println( number + " is repeated " + count + " times in the second column.");
    } // End of occurrence method


    public void occurrences(int[] arg) {    // Defining occurrenceS method

        int max = 0;

        // Finding the maximum occurrences:
        for (int i = 1; i < arg.length; i++)
            if (arg[i] > arg[max]) max = i;
            System.out.println( max + " is the most repeated  number." );
    } // End of occurrenceS method


}

Ответы [ 3 ]

0 голосов
/ 09 июня 2011

вы передаете Object[], в то время как ваш метод ожидает int[]
(обратите внимание, что toArray () возвращает Object [])
, occurrence() - это метод экземпляра, а main - статическийвам нужно будет также изменить occurrence() на статический метод или создать экземпляр списка.
поэтому сигнатура методов будет:

public static void occurrences(Integer[] arg) 

public static void occurrence(Integer[] arg)

, а вызовы методов будут:

Integer[] temp = new Integer[column2.size()];
            switch (num) {
                case 1:
                    Scanner case1 = new Scanner(System.in);
                    System.out.println("Enter a number from first column to see how many occurrences it has: "); 
                    int numb = case1.nextInt();
                    System.out.println(column2.get(numb));
                    break;
                case 2:
                    occurrence(column2.toArray(temp));
                    break;
                case 3:
                    occurrences(column2.toArray(temp));
                    break;              
                default: System.out.println("the number is not 1 or 2 or 3!"); 
            }



ps это не связано с вашим вопросом, но естьявляется строгим соглашением Java, что имя класса начинается с заглавной буквы.

0 голосов
/ 10 июня 2011

Это окончательный ответ (я тоже обновил методы):

import java.util.*; //By Mehdi Davoudi
import java.lang.*;
import java.io.*;

public class list {

    public static void main(String[] args) {

        // Read the text file and store them into two arrays:
        try {
            List<Integer> column1 = new ArrayList<Integer>();   // Defining an integer Array List
            List<Integer> column2 = new ArrayList<Integer>();   // Defining an integer Array List

            Scanner myfile = new Scanner(new FileReader("c:/java/data.txt")); // Reading file using Scanner

            while (myfile.hasNext()) {          // Read file content using a while loop
                column1.add(myfile.nextInt());      // Store the first integer into the first array list
                column2.add(myfile.nextInt());      // Store the next integer into the second array list
            }

            myfile.close(); // close the file

            System.out.println("column 1 elements are:\n" + column1);  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
            System.out.println("column 2 elements are:\n" + column2);  // [12, 15, 6, 4, 3, 6, 12, 8, 8, 9, 13]

            //Getting a number(1-3) from user:
            Scanner cases = new Scanner(System.in);
            System.out.println("Enter a number between 1-3: "); 
            int num = cases.nextInt();

            Integer[] temp = new Integer[column2.size()];

            switch (num) {
                case 1:
                    Scanner case1 = new Scanner(System.in);
                    System.out.println("Enter a number from first column to see its pair in second column: "); 
                    int numb = case1.nextInt();
                    System.out.println(column2.get(numb));
                    break;
                case 2:
                    Occurrence(column2.toArray(temp));
                    break;
                case 3:
                    Occurrences(column2.toArray(temp));
                    break;              
                default: System.out.println("the number is not 1 or 2 or 3!"); 
            }


        } catch (Exception e) {     // we defined it just in the case of error
            e.printStackTrace();    // shows the error
        }

    } // End of MAIN


    public static void Occurrence(Integer[] arg) {  // Defining occurrence method

        int count = 0;

        //Getting a number from user input:
        Scanner userin = new Scanner(System.in);
        System.out.println("Enter an integer number: "); 
        int number = userin.nextInt();        

        // Finding the occurrences:
        for (int i = 0; i < arg.length; i++)
            if (arg[i] == number) count++;

        System.out.println( number + " is repeated " + count + " times in the second column.");
    } // End of occurrence method


    public static void Occurrences(Integer[] ary) { // Defining occurrenceS method
        // Finding the maximum occurrences:
        Map<Integer, Integer> m = new HashMap<Integer, Integer>();

        for (int a : ary) {
            Integer freq = m.get(a);
            m.put(a, (freq == null) ? 1 : freq + 1);
        }

        int max = -1;
        int mostFrequent = -1;

        for (Map.Entry<Integer, Integer> e : m.entrySet()) {
            if (e.getValue() > max) {
                mostFrequent = e.getKey();
                max = e.getValue();
            }
        }

        System.out.println( mostFrequent + " is the most repeated  number in second column." );
    } // End of occurrenceS method


}
0 голосов
/ 09 июня 2011

Я бы предпочел BufferedReader . Читайте его построчно и используйте метод String.split (), чтобы получить элементы столбца.

...