Как напечатать интервал 2D-массива - PullRequest
0 голосов
/ 06 марта 2019

Итак, мой 2D-массив инициализирован данными из файла, и мне было интересно, возможен ли System.out.print только для этого интервала.

public static void OptionUn (String[][] TableauLectureFichier) {

    Scanner rDates = new Scanner(System.in);

    System.out.println("ENTER YOUR INTERVAL HERE IN THE FOLLOWING ORDER DAY1 MONTH1 DAY2 MONTH2");

    String Intervale = rDates.nextLine();

    String[] TabChaine = Intervale.split(" ");
    int[] tIntervale = new int[4];

    for (int i = 0; i <TabChaine.length; i++) {            
        tIntervale[i] = Integer.parseInt(TabChaine[i]);
    }

    int j1 = tIntervale[0],
        j2 = tIntervale[2],
        m1 = tIntervale[1],
        m2 = tIntervale[3];
}

Мой массив в основном содержит температуру, каждая строкатемпература определенной даты, все это заказано с 1 января по 31 декабря.И мой вопрос: как я могу только System.out.print печатать температуры между датами, которые вводит ПОЛЬЗОВАТЕЛЬ.Например, с 1 января по первое февраля (1 1 1 2).

Таким образом, массив выглядит следующим образом.Это неправильный 2D массив

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

public static void OptionUn (String [] [] TableauLectureFichier) {

Scanner rDates = new Scanner(System.in);

System.out.println("ENTER YOUR INTERVAL HERE IN THE FOLLOWING ORDER DAY1 MONTH1 DAY2 MONTH2");

String Intervale = rDates.nextLine();

String[] TabChaine = Intervale.split(" ");
int[] tIntervale = new int[4];

for (int i = 0; i <TabChaine.length; i++) {            
    tIntervale[i] = Integer.parseInt(TabChaine[i]);
}

int j1 = tIntervale[0],
    j2 = tIntervale[2],
    m1 = tIntervale[1],
    m2 = tIntervale[3];


for(int i=m1+1; i < m2; i++) {
    for(int j=j1+1; j < j2; j++) {
         System.out.printf("Temperature on day %d and month %d: %s", j, i,  TableauLectureFichier[i][j]);
    }
}

}

0 голосов
/ 06 марта 2019

Я думаю, что вы хотите напечатать из двумерного массива, переданного функции, и использовать ввод от пользователя для печати выбранного диапазона из переданного массива?

Ваша проблема, должно быть, что просто делатьдве вложенные циклы, не решит это за вас.Вместо этого вы хотите увеличить календарь с «начального месяца» и «начального дня» до «конечного месяца» и «конечного дня».

Обновление

Хорошо, поскольку вы не хотите использовать Календарь для этого, вы можете сделать это, просто перебирая 2d массив с небольшим количеством логики.Я предполагаю, что длина второго измерения массива будет варьироваться в зависимости от того, в каком месяце мы находимся. Это означает, что код, который предоставляет данные, будет иметь только одну запись для каждого действительного дня.

Итакесли данные записаны в високосный год, размерность массива за февраль будет просто иметь длину 29. (TableauLectureFichier[1].length == 29)

Тогда вы можете сделать это следующим образом:

public static void OptionUn (String[][] TableauLectureFichier) {

    Scanner rDates = new Scanner(System.in);

    System.out.println("ENTER YOUR INTERVAL HERE IN THE FOLLOWING ORDER DAY1 MONTH1 DAY2 MONTH2");

    String Intervale = rDates.nextLine();

    String[] TabChaine = Intervale.split(" ");
    int[] tIntervale = new int[4];

    for (int i = 0; i <TabChaine.length; i++) {            
        tIntervale[i] = Integer.parseInt(TabChaine[i]);
    }

    int j1 = tIntervale[0],
        j2 = tIntervale[2],
        m1 = tIntervale[1],
        m2 = tIntervale[3];

    // Loop through all the months specified, taking care to convert from base 1 
    // to base 0
    for (int month = m1 - 1; month < m2; month++) {
        // Assume that we will start at the first day of a month
        int day = 0;

        // However, if the current month is the first, start from the day specified as j1 
        // instead, and convert to base 0 so that we can use it to index into the array
        if (month == m1) {
            day = j1 - 1;
        }

        // Assume that we will run till the end of this month, or in this case to the end
        // of the array for the current month
        int endDay = TableauLectureFichier[month].length;

        // If the current month is the last month, only run to specified end day
        if (month == m2) {
            endDay = j2;
        }

        // Now run from the start day to the end day in the current month, paying 
        // attention to that endDay is still base 1
        for (; day < endDay; day++) {
            System.out.println(String.format("Month: %d, day: %d, value %s",
                month, 
                day, 
                TableauLectureFichier[month][day]));
        }

        // At this point we will step into the next month
    }
}

Я не добавил проверку границ для переменных month или 'day'.Поэтому, если вы передаете это кому-либо - пожалуйста, добавьте проверку границ, прежде чем использовать переменные в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...