2013-01-16 17 views
6

これは簡単な方法ではないようですが、これは私がこれまで行ってきたことです。 "newarray [e] = array [i] .intValue();"で、私はエラーが発生しました "" java.lang.Object "型で" intValue "という名前のメソッドが見つかりませんでした。" ヘルプ!オブジェクト[]配列をjavaのint []配列に変換しますか?

/* 
Description: A game that displays digits 0-9 and asks the user for a number N. 
It then reverses the first N numbers of the sequence. It continues this until 
all of the numbers are in order. 
numbers 

*/ 

import hsa.Console; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
import java.util.Arrays; 


public class ReversalGame3test 

{ 
    static Console c; 

    public static void main (String[] args) 
{ 
    c = new Console(); 

    c.println ("3. REVERSAL GAME"); 
    c.println (""); 
    c.println ("Displayed below are the digits 0-9 in random order. You must then enter a"); 
    c.println ("number N after which the computer will reverse the first N numbers in the"); 
    c.println ("sequence. The goal of this game is to sort all of the numbers in the fewest"); 
    c.println ("number of reversals."); 
    c.println (""); //introduction 

    List numbers = new ArrayList(); 
    numbers.add ("0"); 
    numbers.add ("1"); 
    numbers.add ("2"); 
    numbers.add ("3"); 
    numbers.add ("4"); 
    numbers.add ("5"); 
    numbers.add ("6"); 
    numbers.add ("7"); 
    numbers.add ("8"); 
    numbers.add ("9"); 
    Collections.shuffle (numbers); 
    Object[] array = numbers.toArray (new String [10]); // declares + shuffles numbers and converts them to array 

    c.print ("Random Order: "); 
    for (int i = 0 ; i < 10 ; i++) 
    { 
     c.print ((array [i]) + " "); 
    } 
    c.println (""); 

    boolean check = false; 
    boolean check2 = false; 
    String NS; 
    int N = 0; 
    int count = 0; 
    int e = -1; 
    int[] newarray = new int [10]; 

    //INPUT 
    do 
    { 
     c.print ("Enter a number: "); 
     NS = c.readString(); 
     count += 1; 

     check = isInteger (NS); 
     if (check == true) 
     { 
      N = Integer.parseInt (NS); 
      if (N < 1 || N > 10) 
      { 
       check = false; 
       c.println ("ERROR - INPUT NOT VALID"); 
       c.println (""); 
      } 
      else 
      { 
       c.print ("Next Order: "); 
       for (int i = N - 1 ; i > -1 ; i--) 
       { 
        e += 1; 
        newarray [e] = array [i].intValue(); 
        c.print ((newarray [e]) + " "); 
       } 
       for (int i = N ; i < 10 ; i++) 
       { 
        e += 1; 
        newarray [e] = array [i].intValue(); 
        c.print ((newarray [e]) + " "); 
       } 
       check2 = sorted (newarray); 
      } // rearranges numbers if valid 
     } // checks if N is valid number 
    } 
    while (check == false); 
} // main method 


public static boolean isInteger (String input) 
{ 
    try 
    { 
     Integer.parseInt (input); 
     return true; 
    } 
    catch (NumberFormatException nfe) 
    { 
     return false; 
    } 
} //isInteger method 


public static boolean sorted (int array[]) 
{ 
    boolean isSorted = false; 

    for (int i = 0 ; i < 10 ; i++) 
    { 
     if (array [i] < array [i + 1]) 
     { 
      isSorted = true; 
     } 
     else if (array [i] > array [i + 1]) 
     { 
      isSorted = true; 
     } 
     else 
      isSorted = false; 

     if (isSorted != true) 
      return isSorted; 
    } 
    return isSorted; 
} // sorted method 

}

+1

最初に 'Object'の配列を作成するのはなぜですか? –

+0

私は選択肢がなかったので、ArrayListを直接int配列に変換することはできません。 – javanoob

+0

'Integer'の配列を使うことができます。 –

答えて

2

ObjectクラスはメソッドintValue()を欠いてあなたは、Object.intValue()を呼び出すことはできません。

代わりに、あなたはそうのように、最初のIntegerクラスにObjectをキャストする必要があります。

newarray[e] = ((Integer)array[i]).intValue(); 

編集:StackOverflowの上だけで役に立つヒント - 関連性のものにあなたのコードを制限してください!大規模なコードブロックが必要な場合もありますが、この場合はそうではありません。それは疑問をよりよく見えるようにし、それはより良い応答を得るために結びついています。

また、タグを使用しないでください。現在は推奨されておらず、焼却作業中です。

+0

感謝を知らない場合、私はint型の1が、そして、私はちょうどI'veは時間のために、このサイト上で検索するので、最も正確であるとの回答を望んでいただろうように私はまだ整数配列を比較することはできません解決策は何も見つかりませんでした。 (それはこの場合には大幅に重要ではないかのように)私は、このソリューションの効率性を問うてる – javanoob

8

あなたはInteger.valueOfを使用することができます。

Integer.valueOf((String) array [i]) 

Integerクラスが値として文字列を取り、int値を返すメソッドvalueOfを持って、あなたはこれを使用することができます。渡された文字列が有効な整数値でない場合、NumberFormatExceptionがスローされます。あなたがjava5以上を使用している場合

また、あなたは、コードをより読みやすくするために、genericsを使用して試すことができます。

+0

...私はあなたの提案を試してみましたが、それがその行でjava.lang.ClassCastExceptionが言いました。 '(Integer)'、 'intValue()'に 'Integer.valueOf()'を使って '(String)'をキャストして、私が見ていないだけのメリットはありますか? – Zyerah

+0

'array'は' Interger [] 'ではなく、' String'値を含む 'Object []'なので、 '(Integer)array [i]'はクラスキャスト例外を投げます。 –

+0

これをテストしただけで、ここに例外はスローされません。ステートメント '((整数)x [1])。intValue()は 'x'が' Object [] '型の配列で、' x [1] 'がnullでない適切な値を返します。 – Zyerah

4

あなたは容易になるだろうGenericsを、使用して同じことを実現することができます。

List<Integer> numbers = new ArrayList<Integer>(); 
Integer[] array = numbers.toArray (new Integer [10]); 
+0

「< >」のコードを使用しようとするたびに、「無効な代入演算子」が表示されます。あなたはなぜ/どのように修正するか知っていますか? – javanoob

+0

あなたはjava5以上のバージョンを使用しています...ジェネリックはjava5からのみサポートされています... – Jayamohan

+0

私はそうではないと思いますが、 "Ready to Program"と呼ばれるものをJava用に使用しています – javanoob

1

は コモンズ・ラング

org.apache.commons.lang.ArrayUtils.toPrimitive(Integer[]) 
+0

何それは意味する。申し訳ありませんが、私はひどいcomp.sciを持っています。先生。 – javanoob

0

私はこの方法を作っを試してきた...私は優れていると思います!

public int[] ToMixArray(Object[] Array, int StratIndex, int Valuedefault, int NewLength){ 

    int[] res=new int[NewLength]; 
    for (int i = 0; i < NewLength; i++) { 
     try { res[i]=Integer.parseInt(String.valueOf(Array[StratIndex+i]));} 
     catch(Exception e){res[i]=Valuedefault;} 
    }return res; 
}