2014-12-24 2 views
0

Вопрос: получить оценку 10 человек; то вам нужно спросить каждого со счетом выше 80, если он захочет продолжить изучение «y» для «да» и «n» для нет. Затем вам нужно получить их местоположение в массиве, так что, если персональный номер 5 array [5] = 90 и отвечает «y», он будет создавать новый массив с помощью newarray [1] = [5 (его местоположение)]как определить массив без определенной длины

My вопрос заключается в том, как определить newarray, не зная его длины (сколько «y» было бы). EDIT:

import java.util.Scanner; 
public class p44_52 { 
static Scanner reader = new Scanner(System.in); 
static void input(int []a) 
{ 
    for(int i=0; i<a.length;i++){ 
     System.out.println("Write an score of a student"); 
     a[i]= reader.nextInt(); 
    } 
} 

static void output(int []b) 
{ 
    for (int i =0; i<b.length;i++) 
    { 
     System.out.println("serial number of who choose to continue and score above 80 "+ b[i]); 
    } 
} 

public static void main(String[]args){ 

    char c = 'g'; 
    int count =0; 
    int []score = new int[10]; 
    kelet(score); 

    for(int i=0; i<score.length;i++) 
    { 
     if(score[i]>80) 
     { 
      System.out.println("Studnet number "+i+ " Do you want to continue?"); 
      c = reader.next().charAt(0); 
      if(c == 'y'){ 
       //Here i want to make the new array(length isn't known) for their locationnumbers 
      } 
     } 
    } 


} 

}

+0

невозможно. вы должны знать длину точно –

+0

Не можете ли вы просто использовать 10? – khelwood

+0

Возможный дубликат [Массивы переменной длины (динамические) в Java] (http://stackoverflow.com/questions/2426671/variable-length-dynamic-arrays-in-java) –

ответ

2

Вы можете создать временный массив с тем же размером, что и полный список (потому что вы знаете, что это самое большое, что может потребоваться) и заполнить его с таким количеством студентов, как выбрать продолжение. Вероятно, во временном массиве будет меньше элементов, чем это может быть, потому что некоторые ученики не будут продолжаться, поэтому вы можете создать новый массив, который имеет нужный размер (теперь вы его знаете), и используйте System.arraycopy(), чтобы скопировать все элементов в массив правого размера.

Это не самый эффективный способ сделать это, но это не страшно (он просто использует одно дополнительное распределение массива и операцию копирования), и это, безусловно, достаточно хорошо для домашней работы. И он не использует ничего, кроме массивов.

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

0

Зависит от языка вашего программирования в языке Java должен объявить объем пространства в массиве, прежде чем использовать его.. Это связано с тем, что Java выделяет пространство для массива. Другие языки, такие как Python, не требуют, чтобы вы объявили объем используемого пространства. Есть способы обойти это на Java, например, используя arraylist.

+1

Python не является массивом, это * список * , что является другой концепцией. Java ArrayList представляет собой список, основанный на массиве, а не массиве. –

+0

@ AlexM. Я полностью согласен с тобой. Я смущен, как этот ответ помогает оператору, так как вопрос op очень неясен для меня, по крайней мере, –

+0

@AlexM. списки в Pythons реализованы как массивы. Это полностью _is_ то же самое, что и Java 'ArrayList '. – rightfold

0

Используйте arraylist. Если он скажет «нет», вы удалите его. В конце концов вы

yourArrayList.toArray()

преобразовать ArrayList в массив.

EDIT:

public static void main(String[]args){ 

    char c = 'g'; 
    int count =0; 
    int []score = new int[10]; 
    ArrayList<Integer> list = new ArrayList<Integer>(); 
    kelet(score); 

    for(int i=0; i<score.length;i++) 
    { 
    if(score[i]>80) 
    { 
     System.out.println("Studnet number "+i+ " Do you want to continue?"); 
     c = reader.next().charAt(0); 
     if(c == 'y'){ 
      list.add(//your variable); 
     } 
    } 
    } 

    //If you want turn it into array 
    int [] listArray = list.toArray(); 


} 
+0

Можете ли вы написать код, как его использовать? как вводить числа к нему и как выводить из него? – itay51998

1

в Java вы можете использовать ArrayList вместо массива, если вы не хотите, чтобы дать первоначальную мощность ..

List<Integer> list= new ArrayList<Integer>(); 
list.add(10); //you can add elements dynmically. 

//to get data you can use 
list.get(0); //index at which you want data 
+0

Можете ли вы написать код о том, как его использовать? как вводить числа к нему и как выводить из него? – itay51998

0

ArrayLists

ArrayLists были созданы для решить проблему длины массивов.

в вашем примере:

for(int i=0; i<score.length;i++) 
{ 
    if(score[i]>80) 
    { 
     System.out.println("Studnet number "+i+ " Do you want to continue?"); 
     c = reader.next().charAt(0); 
     if(c == 'y'){ 
      //Here i want to make the new array(length isn't known) for their locationnumbers 
     } 
    } 
} 

вы хотите сделать что-то вроде этого:

List<String> continueStudy = new ArrayList<String>(); 
for(int i=0; i<score.length;i++) 
{ 
    if(score[i]>80) 
    { 
     System.out.println("Studnet number "+i+ " Do you want to continue?"); 
     c = reader.next().charAt(0); 
     if(c == 'y'){ 
      continueStudy.add(c); 
     } 
    } 
} 

Затем вы можете использовать цикл для оценки каждой строки, такие как:

for(String Value : continueStudy){ 
    if(value.contains('y')){ 
     //DO SOMETHING or call seperate function 
    } 
} 
Смежные вопросы