2016-11-26 1 views
-3
import java.util.*; 
public class RandomAddArray { 
    public static void main (String[] args) { 
     AddArray ad = new AddArray(); 
     int[] Ar = new int[4]; 
     ad.AddArray(Ar); 
    } 
} 

class AddArray { 
    public void AddArray(int a[]) { 
     for(int i = 0; i < a.length; i++) { 
      Scanner sc = new Scanner(System.in); 
      int n = sc.nextInt(); 
      a[i] = n + 2; 
      System.out.print(a[i]); 
     } 
    } 
} 

В моем коде я прочитал четыре целых числа с консоли и добавил 2 к каждому из них. Если я набираю номер 1 четыре раза, System.out.print должен выводить 3 четыре раза.Различные выходные данные, чем ожидалось, при печати массива в простой петле

Однако я получаю следующий результат:

Console output

+0

часть того, что вы видите ваш вход. Поэтому лучше напишите ответ после того, как вы прочтете все свои номера. – Henry

+0

@Henry Вы имеете в виду System.out.print должны быть вне цикла for? Я пробовал это, но если это так, программа не может прочитать [i] или [n], поэтому я написал это внутри for-loop. У вас есть хорошие идеи или советы, чтобы исправить это? – javaprogrammer

+0

Вы считаете второй цикл 'for'? – Henry

ответ

0

Если вы звоните System.out.print(value); после получения вашего ввода, значение будет распечатана непосредственно после ввода (последний символ является символом новой строки, следовательно, в следующая строка). Просто поместите его в отдельный цикл после первого цикла, как это:

public void AddArray(int a[]) { 

    Scanner sc = new Scanner(System.in); 

    for(int i = 0; i < a.length; i++) { 
     int n = sc.nextInt(); 
     a[i] = n + 2; 
    } 

    for (int value : a) { 
     System.out.print(value); 
    } 

} 

Затем он будет печатать 3333 в отдельной строке после вашего входа. Если вы хотите напечатать каждый номер в отдельной строке, вместо этого используйте System.out.println(value);.

+0

Спасибо! Он отлично работает! Но у меня есть к вам один вопрос. Что означает: mean in for (int value: a)? – javaprogrammer

+0

@javaprogrammer Это для каждого цикла и означает для каждого значения в массиве 'a'. 'int value' изменяется для каждого значения в' a'. – Kyon

+0

@Kyon Спасибо !!! – javaprogrammer

0

Вот мое текущее решение. Надеюсь, комментарий поможет вам немного, иначе вы можете задать мне еще несколько вопросов. :)

Привет Кён

import java.util.*; 

public class Main { 

    public static void main (String[] args) { 
     // create Array to fill and pass it into our fill function 
     int[] Ar = new int[4]; 
     AddArray.addToArray(Ar); 
     System.out.println(Arrays.toString(Ar)); 
    } 

    private static class AddArray { 

     // static class, there is no need to instantiate it. 
     public static void addToArray(int a[]) { 

      // create on scanner out of the loop 
      Scanner sc = new Scanner(System.in); 

      // for each array index let's scan for some new int's 
      for(int i = 0; i < a.length; i++) { 
       System.out.printf("Type in your %s of %s integer:%n", i+1, a.length); 
       int n = sc.nextInt(); 
       a[i] = n + 2; 
      } 

      // close scanner afterwards 
      sc.close(); 
     } 

    } 

} 

Выход будет:

Type in your 1 of 4 integer: 
4 
Type in your 2 of 4 integer: 
124 
Type in your 3 of 4 integer: 
12 
Type in your 4 of 4 integer: 
2 
[6, 126, 14, 4] 

Process finished with exit code 0 
+0

О, ваш выход выглядит потрясающе .. Спасибо за отличный совет! – javaprogrammer

+0

@Kyon Вам не следует закрывать «Сканер» в потоке «Система». Зачем? Потому что это ответственность за JVM, который ** создал ** это. – thatguy

+0

@thatguy Я закрываю поток, потому что в этом случае он больше не нужен, поэтому нет необходимости держать поток открытым. Ссылаясь на сканеры документов Java, они также закрываются. https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html – Kyon

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