2014-04-20 3 views
-2

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

import java.util.Scanner; 
/** 
    * @author SH 
    * 
    */ 
    public class SearchSort { 

Scanner console = new Scanner(System.in); 

public void inputFavoriteMovies(){ 
    System.out.println("Enter 6 of your favorite movies"); 
    int x = 0; 
    while(x<6){ 
    String movies = console.nextLine(); 
    x++; 
    } 
} 
public void inputFavoriteMusic(){ 
    System.out.println("Enter 5 of your Favorite Songs"); 
    int y = 0; 
    while(y<5){ 
     String music = console.nextLine(); 
     y++; 
    } 
} 

public static void main(String[] args) {   
    new SearchSort().inputFavoriteMovies(); 
    new SearchSort().inputFavoriteMusic(); 

    String[] myFavoriteMovies = new String[6]; 


    String[] myFavoriteMsuic = new String[5]; 
} 

} 
+0

Если вы не нашли ничего, что не достаточно исследовали. Вы в настоящее время разбираете строки, а затем ничего не делаете. Возможно, вы захотите сделать свои переменные класса String [] массивными, чтобы сделать их видимыми для ваших методов. Дальнейшее чтение по этому поводу: области. Кроме того, я не думаю, что люди больше используют консоль. Может быть, 'Scanner' или' BufferedReader' – keyser

+0

Вы не хотите пытаться закодировать все, а затем запускать все сразу. Это похоже на создание автомобиля: вы не закончили бы все это и попытаетесь запустить его, потому что, если он не запускается, вы не знаете, что работает и что не работает. Начните с каждой отдельной части программы и работайте над ней до тех пор, пока она не будет работать именно так, как вам хотелось бы, и объедините рабочие части, пока у вас не будет конечный продукт. – Matthew

+0

@ ᴋᴇʏsᴇʀ Он не использует консоль, это просто имя переменной. Он использует класс «Сканер». Какой-то запутанный, хе-хе – Matthew

ответ

0

Вам необходимо создать массивы перед запуском методов ввода, а не потом. Затем, по мере ввода каждой строки, поместите строку в соответствующий массив.

1

Взгляните на изменения, которые я сделал ниже, на ваш код и мои комментарии, связанные с каждым. Если вы хотите сделать это немного более гибким, используйте ArrayList внутри методов и дайте пользователю ввести столько, сколько хотите, и используйте метод .add() ArrayList, чтобы добавить каждую запись, которую пользователь вводит. Вам придётся придумать какое-то «дозорное» значение, которое пользователь наберет, когда они будут сделаны (пустая строка будет работать; вам нужно будет затем проверить inputValue.Length() строки, которую они ввели, и сравнить до 0 и выйдите из цикла while после этой длины == 0). Затем вы можете использовать toArray() ArrayList и преобразовать его в массив, который затем вернется к вызывающему коду. Это даст вам очень динамичную компоновку и немного большую гибкость. Возможно, вы еще не узнали о ArrayList, но, по всей вероятности, вы будете довольно скоро.

Надеюсь, это поможет и удачи!

import java.util.Scanner; 
    /** 
     * @author SH 
     * 
     */ 
     public class SearchSort { 

    /* 

    Since your code is essentially linear in nature (and not truly object-oriented), it's probably best to make it all static. You'll note I added the static modifier to the 2 methods you created along with the console declaration. 

    */ 

    static Scanner console = new Scanner(System.in); 

    public static void inputFavoriteMovies(String[] storage){ 
/* 
    For both of these methods, it makes sense to pass an array into them and then use the passed array for storage. Since arrays are essentially pass by reference, when you make changes to the array in this method, the array that was passed in will be modified when you return from this code. 

Using the length of the array for both the prompt and the loop control helps to reduce the "index out of bounds" errors that may otherwise occur. It would actually be a little better to code this as a for loop: 

for (int x=0; x < storage.length; x++) { 
<insert all the code> 
} // end for 

*/ 
     System.out.println("Enter " + storage.length + " of your favorite movies"); 
     int x = 0; 
     while(x < storage.length){ 
     storage[x] = console.nextLine(); 
     x++; 
     } 
    } 

/* 
comments here are essentially identical to those above. 
*/ 

    public static void inputFavoriteMusic(String[] storage){ 
     System.out.println("Enter " + storage.length + " of your Favorite Songs"); 
     int y = 0; 
     while(y < storage.length){ 
      storage[y] = console.nextLine(); 
      y++; 
     } 
    } 

    public static void main(String[] args) {   

/* 
Here in main, you basically declare an array as large as you want. Since you are now using methods that look at the length of the array, the code is slightly more abstract and gives you a tad more flexibility in design since it's not hard-coded 
*/ 

     String[] myFavoriteMovies = new String[6]; 

// After declaring the array, pass it to the input method you created earlier. When that 
// method returns, the array will contain the values the user entered. 

     inputFavoriteMovies(myFavoriteMovies); 

// same as above - declare an array, then pass it to your input method. 
     String[] myFavoriteMusic = new String[5]; 
     inputFavoriteMusic(myFavoriteMusic); 

/* now, if you want to print the results, you'd do a pair of for loops that iterate 
    over each array and output the results. For a bit more elegance, you could use 
    this form of the for loop: 

    for (String userInput : myFavoriteMovies) { 
System.out.println(userInput); 
} 

for (String userInput : myFavoriteMusic) { 
System.out.println(userInput) 
    } 

    } 
} 
Смежные вопросы