Возникли проблемы с массивами (с участием нескольких пользователей)?

int number = keyboard.nextInt();
String [][] myArray = new String[number][1]
for (int i = 0; i < x; i++)
{   
    System.out.println("Enter food name: ");
    myArray[i][0] = keyboard.nextLine();

    for (int j = 0; j < 1; j++)
    {   
    System.out.println("Enter the type of this food: ");
    myArray[i][j] = keyboard.nextLine();
    }
}

Вот мой код того, что я собираюсь спросить. Я хочу, чтобы он распечатывал эти выходные данные при запуске этой программы:

Enter food name:
(where user type his or her input)
Enter the type of this food:
(where user type his or her input)

(My problem is it prints out this instead for the first loop:)
Enter food name:
Enter the type of this food:
(where user type his or her input)

Без возможности ввода продукта питания. После первого цикла программа возвращается в нормальное состояние с выводом, который я хочу, но как мне изменить код, чтобы первый цикл принимал пользовательский ввод для «введите название еды:»?

Заранее спасибо.

Изменить: извините, что не увидел этот вопрос заранее, но он не о цикле for, поэтому, если я введу пустую строку перед следующим вводом, мой цикл не будет работать. Есть ли какое-нибудь решение для этого?

Изменить: Получил работу. Спасибо всем.


person user3503794    schedule 06.04.2014    source источник
comment
возможный дубликат пропуска nextLine() после использования nextInt()   -  person cheseaux    schedule 06.04.2014
comment
ах жаль, что не видел, что раньше. есть ли какое-то исправление для цикла? это так же, как ответ на этот вопрос?   -  person user3503794    schedule 06.04.2014
comment
Просто напишите keyboard.nextLine(); после строки int number = keyboard.nextInt(); и все будет готово.   -  person Aman Agnihotri    schedule 06.04.2014
comment
хорошо, я попробую это. благодарю вас   -  person user3503794    schedule 06.04.2014
comment
Еще раз спасибо, Аман Агнихотри. Это сработало хД. Если вы хотите, вы можете поставить это как ответ на этот вопрос, и я выберу его как лучший.   -  person user3503794    schedule 06.04.2014


Ответы (1)


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

import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
import java.util.Scanner;

public class Foodarray {

private static String[][] foodInformation;

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner keyboard = new Scanner(System.in);
    foodInformation = getFoodInformation(keyboard);

}

private static String[][] getFoodInformation(Scanner inputDevice) {
    String[][] result = null;
    boolean isStoping = false;
    ArrayList<String> holdName = new ArrayList<String>();
    ArrayList<String> holdType = new ArrayList<String>();

    while (!isStoping) {
        System.out.println("Enter food name (or end to exit): ");
        String foodName = inputDevice.nextLine().trim();
        isStoping = "end".equalsIgnoreCase(foodName);
        if (!isStoping) {
            System.out.println("Enter food type");
            String foodType = inputDevice.nextLine().trim();
            holdName.add(foodName);
            holdType.add(foodType);
        }
    }
    int foodCount = holdName.size();
    if (foodCount>0) {
        result = new String[foodCount][foodCount];
        for (int i=0; i < foodCount; i++) {
            result[i][0] = holdName.get(i);
            result[i][1] = holdType.get(i);
        }
    }

    return result;

}

 }
person ErstwhileIII    schedule 06.04.2014
comment
Спасибо за ваш вклад. Я обязательно это проверю. - person user3503794; 06.04.2014