2017-05-10 11 views
-1

私は配列を入力する必要がある学校用の小さなプログラムに取り組んでいます。隣接要素が要素よりも小さい場合は、配列内のすべての要素をチェックする必要があります。隣人が小さい場合 - >この要素は、余分*配列の範囲外のJava

を取得しかし、私は、例えば境界線の問題点、最初のものと最後の1つを得ました。最初のものには隣人が1つしかありません。私はあなたが「*」を追加して小さくする要素の両方の隣人を必要とするので、彼らは1が欠落しているので、あなたは最初と最後の要素を(スキップすることができ、私に

+4

は '私は= numbers.size() - '1'私は '1'が範囲外にあります+。 'i Jens

+0

は今、なぜ人々はここに投稿する前にGoogleで試してみていない:(@Jensにaddtionで –

+0

を確認、例外はあなたのエラーの行番号を提供します。あなたは、エラーのソースを見ることができるようにします。[の –

答えて

0

を助けることを願って

public class Tops { 
    Scanner sc = new Scanner(System.in); 

    public void calculate(){ 
     String number; 
     ArrayList<String> numbers; //def’s, decl’s ArrayList 
     ArrayList<String> after; 
     numbers = new ArrayList<>(); //creates numbers 
     after = new ArrayList<>(); 
     number = sc.next(); 

     while (!"0".equals(number)) { 
      numbers.add(number); //initializes each ArrayList element 
      number = sc.next();   
     } 

     for (int i = 0; i < numbers.size(); i++) {    
        if (Integer.parseInt(numbers.get(i)) > Integer.parseInt(numbers.get(i+1)) && Integer.parseInt(numbers.get(i)) > Integer.parseInt(numbers.get(i-1))){ 
         String replace = numbers.get(i)+"*"; 
         after.add(replace); 
        } else { 
         after.add(numbers.get(i)); 
        } 
     } 

     for(int i=0;i<after.size();i++){ 
      System.out.print(after.get(i)+ " "); 
     } 
    } 

    public static void main(String[] args) { 
     new Tops().calculate(); 
    } 

} 

隣人の)。

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


public class Tops { 

private static final Scanner INPUT_SCANNER = new Scanner(System.in); 


public static void calculate() { 
    // Initialize numbers 
    ArrayList<String> numbers = new ArrayList<>(); 
    String number = INPUT_SCANNER.next(); 
    while (!"0".equals(number)) { 
     numbers.add(number); 
     number = INPUT_SCANNER.next(); 
    } 

    // Check the neighbours 
    ArrayList<String> after = new ArrayList<>(); 

    // Check first element 
    if (numbers.get(0) > numbers.get(1)) { 
     after.add(numbers.get(0) + "*"); 
    } else { 
     after.add(numbers.get(0)); 
    } 
    // Check other elements 
    for (int i = 1; i < numbers.size() - 1; i++) { 
     int previous = Integer.parseInt(numbers.get(i - 1)); 
     int current = Integer.parseInt(numbers.get(i)); 
     int next = Integer.parseInt(numbers.get(i + 1)); 

     String newElement = numbers.get(i); 
     if (current > next && current > previous) { 
      newElement = newElement + "*"; 
     } 

     after.add(newElement); 
    } 
    // Check last element 
    if (numbers.get(numbers.size() - 1) > numbers.get(numbers.size() - 2)) { 
     after.add(numbers.get(numbers.size() - 1) + "*"); 
    } else { 
     after.add(numbers.get(numbers.size() - 1)); 
    } 
    after.add(numbers.get(numbers.size() - 1)); 

    // Show the result 
    for (int i = 0; i < after.size(); i++) { 
     System.out.print(after.get(i) + " "); 
    } 
} 

public static void main(String[] args) { 
    calculate(); 
} 

} 

実行例:

INPUT: 1 2 3 2 1 0 
OUTPUT: 1 2 3* 2 1 

ていることに注意してください:あなたがいずれかを持っていないので、私はあなたの計算方法は、静的行った

  • この考慮して、あなたのコードを適応Topsクラスの非静的フィールド

  • 番号の初期化をメソッドの先頭に移動しました
  • 最終的な数値はアフターリストに1回だけ追加されるため、初期化する必要はありません
  • 現在の数値を文字列に変換せずに比較を実行するにはintはループの繰り返しごとに2回、int形式をif比較の外に移動しました。あなたのループを実行している場合
+0

は、あなたの答えをありがとう、私は。私は考えても最初にそれを説明していなかったし、最後も*を持っていますが、唯一の隣人を持つことができます。 – soepblik

+0

をので、代わりに要素を追加する場合は追加する各コーナーケースのチェック。私は答え –

+0

を更新します@ soepblikしてください有用であれば[回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)と考えてください。 –

関連する問題