Любимая еда Java-программы пошла не так - PullRequest
0 голосов
/ 02 сентября 2018

Ниже моя программа на Java. Прямо сейчас единственный способ для правильной работы программы состоит в том, чтобы последний столбец был самым длинным. Если последний столбец в массиве не самый длинный, то вывод не верен. Например, если массив food имеет больше элементов во втором столбце, чем в третьем столбце, например:

String[][] food = {
        {"Bannana", "Apple", "Pear", "Orange"}, // fruits
        {"GreenBean", "Iceburg", "Spenach", "peas", "carrots", "potatoes", "beans"}, // vegetables 
        {"Steak",   "Baccon", "Beef", "TurkeyB", "TurkeyBacon", "Chicken"} // meats 
};

тогда, если, например, chicken введено в качестве ввода, вывод будет таким:

Yo have no favorite food
Your favorite food is Chicken

А также, если вход, например, biscuit, то вывод будет таким:

Yo have no favorite food
Yo have no favorite food

Итак, есть ли способ распечатать "Yo have no favorite food" только один раз или правильно распечатать любимую еду, при этом последняя колонка не должна быть самой длинной?

Вот код:

package com.begg;

import java.util.*;

public class List {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        String[][] food = {
                {"Bannana", "Apple", "Pear", "Orange"}, // fruits
                {"GreenBean", "Iceburg", "Spenach", "peas"}, // vegetables 
                {"Steak",   "Baccon", "Beef", "TurkeyB", "TurkeyBacon", "Chicken"} // meats 
        };

        for(int row = 0; row < food.length; row++) {
            for (int col = 0; col < food[row].length; col ++) {
                System.out.print(food[row][col] + ", ");
            }
            System.out.println();
        }
        System.out.println("Enter your favorite out of the options above:");
        String k = sc.next();
        loop2:
        for(int row2 = 0; row2<food.length; row2++) {
            for (int col2 = 0; col2< food[row2].length; col2++) {
                if (k.equalsIgnoreCase(food[row2][col2])) {
                    System.out.println("Your favorite food is " + food[row2][col2]);
                    break loop2;
                }
                else if (!(k.equalsIgnoreCase(food[row2][col2])) & col2== 5 ) {
                    System.out.println("Yo have no favorite food");
                }
            }
        }

    }
}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Изменение этой части:

else if (!(k.equalsIgnoreCase(food[row2][col2])) & col2== 5 ) {
    System.out.println("Yo have no favorite food");
}

к этому:

else if (!(k.equalsIgnoreCase(food[row2][col2])) && row2 == food.length-1 && col2 == food[row2].length-1) {
    System.out.println("Yo have no favorite food");
}

должен делать то, что я думаю, вы ищете Отредактированный else if проверяет, что все значения массива были проверены (не имеет значения, какой столбец длиннее), и если ни одно из них не соответствует входному значению, то он выполнит System.out.println("Yo have no favorite food"); один раз.

0 голосов
/ 02 сентября 2018

Использовал Hashset вместо двух for для итерации на 2d array. Код как;

import java.util.HashSet;
import java.util.Scanner;

public class List {
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        String[][] food = {
                {"Bannana", "Apple", "Pear", "Orange"}, // fruits
                {"GreenBean", "Iceburg", "Spenach", "peas"}, // vegetables
                {"Steak", "Baccon", "Beef", "TurkeyB", "TurkeyBacon", "Chicken"} // meats

                /*
                 * Your longest part of your array should be the longest
                 * if it's not, using the length  of the column to end a loop may cause problems
                 * if you use the row instead, everything after the row three will execute
                 *
                 */


        };

        for (int row = 0; row < food.length; row++) {
            for (int col = 0; col < food[row].length; col++) {
                System.out.print(food[row][col] + ", ");
            }
            System.out.println();
        }

        System.out.println("Enter your favorite out of the options above:");
        String k = sc.next();

        final HashSet<Object> setOfFood = new HashSet<>();
        //Add all food to hashset
        for (String[] subFoodList : food) {
            for (String subFood : subFoodList) {
                setOfFood.add(subFood.toLowerCase());
            }
        }

        //if set containts scanners string returns relevant response
        if (setOfFood.contains(k.toLowerCase())) {
            System.out.println("Your favorite food is " + k);
        } else {
            System.out.println("Yo have no favorite food");
        }

    }
}
...