2017-08-31 14 views
2

私のプログラムは、ArrayListが入力された番号を格納し、ユーザーが-1を入力すると、プログラムは終了して、入力されたすべての番号を昇順で印刷します。私のプログラムは実行されますが、番号が入力されると、番号が印刷されません。声明がうまくいかないように思えます。 if文でArrayListを呼び出す方法を正しく動作させるには?入力された番号を格納するarraylist

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.Collections; 

public class testArrayList {   

    public static void main(String[] args) { 

     Scanner inputs = new Scanner(System.in); 
     ArrayList <Integer> nums = new ArrayList<Integer>(); 

     System.out.println("Enter a number(-1 to end): "); 

     while(inputs.hasNextInt()) { 
      nums.add(inputs.nextInt()); 
     } 

     // it looks like it runs until here. 

      for (Integer n : nums) { 
       if (n == -1) { 
        Collections.sort (nums); 
        System.out.println("Here is the list of numbers : "); 
        System.out.println(n); 
       } 
      }   
    } 
} 
+1

あなたは(https://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help- [デバッガ]でそのコードをステップ実行しようとしたことがあり私の診断の問題)? – litelite

+0

Integerではなく、プリミティブとしてintを使用してみませんか? – Razvan

+0

'int'を' ArrayList'に入れることはできません。 – csmckelvey

答えて

0

System.inブロックして、新しい入力を待ち、そして限り、あなたは数字の入力を続けとして、hasNextInt()は常にtrueになります。代わりに、あなたが最初の入力で-1をチェックする必要があります(while)ループ:リストに番号を追加する

while(inputs.hasNextInt()) { 
    int num = inputs.nextInt(); 
    if (num == -1) { 
     break; 
    } 
    nums.add(num); 
} 

nums.sort(); 
System.out.println("Here is the list of numbers : "); 
System.out.println(nums); 
+0

我々は同じと言った。あなたのコードは、出力が異なります。あなたの出力は、{1、2、3、7、10}のような出力につながるリストのtoStringメソッドを使用しますが、元のコードは各行を1行に出力します。 – Lothar

0

あなたのループは値をチェックしません-1ループを停止します。 -1はintなので、それは継続しています。

これを修正したら、次の問題に遭遇します。あなたはリストの要素を繰り返し処理していて、ユーザーが1を入力するたびにソートを行います。チェックはしていませんが、反復処理中に基になるリストを変更すると、 。あなたの説明によると、ループの前にsortを呼び出して、ループ内でSystem.out.printlnを実行する必要があります。

0

プログラムは実行されますが、番号が入力されると、 の番号が印刷されません。

あなたのコードでは、それが唯一のリストnumsからn値が-1に等しいされそうになります。文は一度時点でステップ実行 をworking.Tryingていない場合のように思えます。

その代わりに、としてあなたのコードを入れてみてください:文は到達しません場合

// Accept user input 
Integer input = inputs.nextInt(); 

// check if it is not -1 
while(input != -1) { 
    nums.add(input); 
    input = inputs.nextInt() 
} 

// sort the arraylist 
Collections.sort (nums); 

// print the elements 
System.out.println("Here is the list of numbers : ");   
for (Integer n : nums) { 
    System.out.println(n); 
} 
+0

ありがとうございました!それは多くの助けになります! – Michelle

+0

@Michelle Cool。そうであれば、将来他人を助けることができるように答えを記入してください。 – nullpointer

0

ザ・は、あなたがスキャナは空白を無視するためならば、印刷されることはありませんちょうどその前のprintlnを追加することでこれを確認することができます。あなたが手紙を入力するまで、入力を取ろうとし続けます。希望の効果を得るために、おそらくn = inputs.nextInt()を実行します。 nが-1の場合、breakを使います。また、あなたのすべてのループと条件が不要な場合は、リストをソートして、それを印刷します。そうでなければ、メモリアドレスになります。なぜなら、すべての場合にそうしているからです。 。

0

は、私はいくつかの答えがあると知っているが、ここに私のバージョンがあります:-1の終了コードの読み出し時に

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.Collections; 

    public class testArrayList 
    {   

    public static void main(String[] args) 
    { 

     Scanner inputs = new Scanner(System.in); 
     ArrayList <Integer> nums = new ArrayList<Integer>(); 

     System.out.println("Enter a number(-1 to end): "); 

     while(inputs.hasNextInt()) 
     { 
      //check if the next value is -1 
      int nextVal = inputs.nextInt(); 
      if(nextVal == -1) 
      { 
       break; //then exit the loop 
      } 
      else 
      { 
       nums.add(inputs.nextInt()); //else add to the list 
      } 

     } 

     //since we exited the loop, we can sort the list, and print header 
     Collections.sort (nums); 
     System.out.println("Here is the list of numbers : "); 
     for (int i = 0 ; i < nums.size(); i++) 
     {        
      System.out.println(nums.get(i)); // print every sorted int from 
              // the list 
     } 
    }   
} 

もあり、コードのロジックに問題印刷した、と。これで読み込みループに入り、並べ替えられたリスト全体が表示されます。

はここでテスト:私は、コードを再編成し、-1の値が入力されたときにマップを終了しようとしているとして、それははるかにシンプルにしている https://www.jdoodle.com/online-java-compiler

0

public class TestArrayList { 

    public static void main(String[] args) { 

      Scanner scanner = new Scanner(System.in); 
      ArrayList <Integer> nums = new ArrayList<Integer>(); 

      while(true) { 
       System.out.println("Enter a number(-1 to end): "); 
       int value = scanner.nextInt(); 

       /*read until your input is -1*/ 
       if (value != -1){ 
        nums.add(value); 
       }else { 
        Collections.sort (nums); 
        System.out.println("Here is the list of numbers : "); 
        for (int i : nums){ 
         System.out.println(i); 
        } 
        break; 
       } 
      } 
      scanner.close(); 
     } 
} 
0

スキャナ入力=新しいスキャナ(システム。に); ArrayList nums = new ArrayList();

System.out.println("Enter a number(-1 to end): "); 

    while (inputs.hasNextInt()) { 
     //Accepts the inputs 
     int input = inputs.nextInt(); 
     //Checks condition 
     if (input == -1) { 
      break;// breaks out of the loop is fails 
     } 
     nums.add(input);// else keep adding 
    } 
    System.out.println("Here is the list of numbers : "); 
    Collections.sort(nums); 
    for (Integer n : nums) { 
     System.out.println(n); 
    } 
関連する問題