2013-09-30 4 views
0

Спасибо, что посмотрели мой код. Я изучаю Java и сталкиваюсь с проблемой, которая сводит меня с ума.Как добавить внутри цикла while в java?

/* 
* The loop reads positive integers from standard input and that 
* terminates when it reads an integer that is not positive. After the loop 
* terminates, it prints out, separated by a space and on a single line, the 
* sum of all the even integers read and the sum of all the odd integers 
*/ 

Дело в том, что переменные не добавляются! Я знаю, что мой синтаксис хорош. Я думаю, что есть что-то о языке Java, который я не понимаю, с тем, как цикл работает и добавляет.

import java.util.Scanner; 

class Testing2 { 
    public static void main(String[] args) { 
     int sumP = 0; 
     int sumO = 0; 

     Scanner stdin = new Scanner(System.in); 

     System.out.println("Enter a positive or negative integer: "); 

     while ((stdin.nextInt()) >= 0) { 
      if (stdin.nextInt() % 2 == 0) 
       sumP += stdin.nextInt(); 
      else 
       sumO += stdin.nextInt(); 
     } 
     System.out.println(sumP + " " + sumO); 
     stdin.close(); 

    } 
}; 
+0

Уверены ли вы? Почему бы не добавить несколько операторов System.out.println() для отслеживания выполнения? – kosa

ответ

3

Каждый раз, когда вы звоните stdin.nextInt() он ищет другое целое. Чтобы избежать этого, в верхнем установить переменным равно вход:

int myInt = stdin.nextInt(); 

if (myInt >= 0) { 
if (myInt % 2 == 0) 
       sumP += myInt; 
      else 
       sumO += myInt; 
     } 
     System.out.println(sumP + " " + sumO); 
     stdin.close(); 

    } 
} 

Вы не поставить точку с запятой после последней фигурной скобки, а также. Если вы ожидаете несколько номеров для ввода вы можете постоянно проверять на следующий он с,

while(stdin.hasNext()){ 
int myInt = stdin.nextInt(); 
} 
+1

Я думаю, вы хотели заменить еще несколько таких 'nextInt()' вызовов с 'myInt', не так ли? –

+0

Да, извините, отредактировал его, чтобы использовать переменную вместо stdin.nextInt() – sreisman

+0

import java.util.Scanner; класс Testing2 { \t государственной статической силы основных (String [] арг) { \t \t INT SUMP = 0; \t \t int sumO = 0; \t \t \t \t System.out.println ("Введите положительное или отрицательное целое число:"); \t \t Сканер stdin = новый сканер (System.in); \t \t в то время как (stdin.hasNext()) { \t \t \t INT Мьин = stdin.nextInt(); \t \t \t, если (Мьин> = 0) { \t \t \t \t, если (Мьин% 2 == 0) \t \t \t \t \t SUMP + = Мьин; \t \t \t \t еще \t \t \t \t \t SUMO + = Мьин; \t \t \t} \t \t \t System.out.println (SUMP + "" + SUMO); \t \t \t \t \t } \t \t stdin.close(); \t} }; – user2101421

0

у также должно поставить сканер в то время:

do { 
Scanner stdin = new Scanner(System.in); 
      if (stdin.nextInt() % 2 == 0) 
       sumP += stdin.nextInt(); 
      else 
       sumO += stdin.nextInt(); 
     }while ((stdin.nextInt()) >= 0) 
+0

Это даже не компилируется. Вы не можете определить stdin дважды. Также это не решение проблемы – Piro

+0

да. я хочу сказать, что сканер должен помещать внутри цикла. – elune

0
while ((stdin.nextInt()) >= 0) { 
    if (stdin.nextInt() % 2 == 0) 
     sumP += stdin.nextInt(); 
    else 
     sumO += stdin.nextInt(); 
} 

Ваша проблема в том, что вы читаете в 3-х чисел каждый раз, когда вы цикл. Сохраните результат вашего чтения, а затем решите, что с ним делать, не отбрасывайте его и читайте еще 2 числа.

int nextInt; 
while ((nextInt = stdin.nextInt()) >= 0) { 
    // Do things with nextInt 
} 
1

Я думаю, что это решает проблему,

Scanner stdin = new Scanner(System.in); 
while(1) 
{ 
int num = stdin.nextInt(); 
if(num<0) 
{ 
    stdin.close(); 
    break; 
} 
else 
{ 
    if(num%2==0) 
    { 
    //Initialize sumP and sumO to 0 
    sumP=sumP+num; 
    } 
    else 
    { 
    sumO=sumO+num; 
    } 
} 
//You can now output sumP and sum) outside the loop safely. 
} 
0

Я думаю, что вы хотите, чтобы нуждаться в кодировании как этот

import java.util.Scanner; 

class TestScaner { 
public static void main(String[] args) { 
    int sumP = 0; 
    int sumO = 0; 
    Scanner stdin = null; 
    while (true) { 
     stdin = new Scanner(System.in); 

     System.out.println("Enter a positive or negative integer: "); 

     int num = stdin.nextInt(); 

     if (num % 2 == 0) 
      sumP += num; 
     else 
      sumO += num; 

     System.out.println("==" + sumP + " " + sumO); 

    } 

} 

};

1

Проблема в том, что вы используете nextInt() каждый раз. Использование как this-

import java.util.Scanner; 

class Testing2 { 
    public static void main(String[] args) { 
     int sumP = 0; 
     int sumO = 0; 

     Scanner stdin = new Scanner(System.in); 

     System.out.println("Enter a positive or negative integer: "); 
     int temp; 
     while ((temp=stdin.nextInt())>0) { 
      if (temp % 2 == 0) 
       sumP += temp; 
      else 
       sumO += temp; 
     } 
     System.out.println(sumP + " " + sumO); 
     stdin.close(); 

    } 
} 
0

Пожалуйста, попробуйте эти кодовые

import java.util.Scanner; 

class Testing2 { 
    public static void main(String[] args) { 
    int sumP = 0; 
    int sumO = 0; 
    int scn = 0; 

    Scanner stdin = new Scanner(System.in); 

    System.out.println("Enter a positive or negative integer: "); 

    scn = stdin.nextInt(); 
    while (scn >= 0) { 

     System.out.println("stdin next " + scn); 
     if (scn % 2 == 0){ 
      sumP += scn; 
     }else{ 
      sumO += scn; 
     } 
     scn--; 
    } 
    System.out.println(sumP + " " + sumO); 


    } 
}; 

ваш stdin.nextInt() не уменьшает его только возвращает значение вашего стандартного ввода, поэтому это не цикл должным образом.

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