2014-08-18 5 views
4

Я хотел бы начать с того, что если это общеизвестно, пожалуйста, простите меня и получите терпение. Я немного новичок в Java. Я пытаюсь написать программу, которая будет хранить множество значений переменных в виде буфера. Мне было интересно, есть ли способ, чтобы программа «создавала» свои собственные переменные и назначала их значениям. Вот пример того, что я пытаюсь избежать:Как я могу создать собственную переменную с Java?

package test; 

import java.util.Scanner; 

public class Main { 
    public static void main(String args[]) { 

     int inputCacheNumber = 0; 
     //Text File: 
     String userInputCache1 = null; 
     String userInputCache2 = null; 
     String userInputCache3 = null; 
     String userInputCache4 = null; 

     //Program 
     while (true) { 
      Scanner scan = new Scanner(System.in); 
      System.out.println("User Input: "); 
      String userInput; 
      userInput = scan.nextLine(); 

      // This would be in the text file 
      if (inputCacheNumber == 0) { 
       userInputCache1 = userInput; 
       inputCacheNumber++; 
       System.out.println(userInputCache1); 
      } else if (inputCacheNumber == 1) { 
       userInputCache2 = userInput; 
       inputCacheNumber++; 
      } else if (inputCacheNumber == 2) { 
       userInputCache3 = userInput; 
       inputCacheNumber++; 
      } else if (inputCacheNumber == 3) { 
       userInputCache4 = userInput; 
       inputCacheNumber++; 
      } 
      // And so on 

     } 

    } 
} 

Так просто, чтобы попытаться подвести итог, я хотел бы знать, если есть способ для программы, чтобы установить неограниченное количество введенных пользователем значений Строковые значения. Мне интересно, есть ли способ избежать предопределения всех переменных, которые могут понадобиться. Спасибо за чтение, и ваше терпение и помощь! ~ Rane

+0

Вы можете использовать контейнер, Google "Java контейнеры" для получения дополнительной информации. – OMGtechy

+3

Посмотрите на [Коллекционный трейл] (http://docs.oracle.com/javase/tutorial/collections/), в частности, вы можете посмотреть «Список» (и «ArrayList'). В зависимости от сложности хранящейся информации вам может потребоваться создать пользовательский объект для поддержания общих свойств для каждого объекта, но это может превышать то, что вы запрашиваете – MadProgrammer

+0

@MadProgrammer - это мой ответ? Я чувствую, что это слишком потрепанный –

ответ

10

Вы можете использовать структуру данных Array List.

Класс ArrayList расширяет AbstractList и реализует интерфейс List . ArrayList поддерживает динамические массивы, которые могут расти по мере необходимости.

Например:

List<String> userInputCache = new ArrayList<>(); 

и когда вы хотите добавить каждый вход в ваш массив как

if (inputCacheNumber == 0) { 
    userInputCache.add(userInput); // <----- here 
    inputCacheNumber++; 
} 

Если вы хотите, чтобы пройти список массива можно сделать следующим образом:

for (int i = 0; i < userInputCache.size(); i++) { 
    System.out.println(" your user input is " + userInputCache.get(i)); 
} 

or you ca п использовать enhanced for loop

for(String st : userInputCache) { 
    System.out.println("Your user input is " + st); 
} 

Примечание: лучше положить ваши Scanner в вашем try catch block with resource, так что вы не будете беспокоиться, если она близка или не в конце.

Например:

try(Scanner input = new Scanner(System.in)) { 
    /* 
    **whatever code you have you put here** 
    Good point for MadProgrammer: 
    Just beware of it, that's all. A lot of people have multiple stages in their 
    programs which may require them to create a new Scanner AFTER the try-block 
    */ 
} catch(Exception e) { 
} 

Для получения дополнительной информации о ArrayList

http://www.tutorialspoint.com/java/java_arraylist_class.htm

+0

Просто будьте осторожны, когда 'Scanner' использует' System.в ', поскольку вы действительно не хотите закрывать поток stdin;) – MadProgrammer

+0

@MadProgrammer, но он будет закрыт в конце процессов, я прав? У меня никогда не было никаких проблем с этим –

+0

Если вы никогда не используете его снова, все должно быть хорошо, но если ваша программа должна сделать что-то еще с 'stdin', у вас будут проблемы ... – MadProgrammer

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