2016-03-26 4 views
0

私は、入力文字列から指示を受け取る「ワーカー」をjavaで作成するプロジェクトに取り組んでいます。入力文字列では、通常、最初の4つの数字、その後にN、S、W、またはEの直後に数字と文字を入れる必要があります。リストの最初の2つの数字は、このワーカーが歩くことができるエリアのサイズ。次の2つの数字は作業者の出発点です。手紙の番号は、労働者が歩く方向と歩数を決定します。私が抱えている問題は、最初の4桁を文字列から抜き出し、それぞれをどのようにするべきかを理解することができないということです。文字列から離して整数を取得してロボットに指示を与える

import java.util.*; 
import java.io.*; 
public class Worker { 
private int height; 
public void readInstructions(String inputFileName, String outputFileName) throws InvalidWorkerInstructionException{ 
    try{ 
    Scanner in = new Scanner(inputFileName); 
    PrintWriter wrt; 
     wrt = new PrintWriter(outputFileName); 

    if(inputFileName.startsWith("i")){ 
     System.out.println("Input file not found."); 
     //wrt.println("Input file not found."); 
    } 
    while(in.hasNext()){ 
     String s = in.nextLine(); 
     if(Integer.parseInt(s)<= 9){ 

     } 
    } 
    }catch(InvalidWorkerInstructionException e){ 

    }catch(FileNotFoundException e){ 

    } 

私はまっすぐに答えを求めるのが大好きだが、これはので、私は誰もが私に固定されたコードを付与するものではありません好むプロジェクトです。私が間違ってやっていることや、どこで問題を解決するべきか、私に助言を与えることができればどうか。

私はアドバイスを試したので、私はもう一つのことを実感しました。だから、私は入力txtの名前を与える文字列を受け取ります。その入力txtの中には、数字と方向があります。このテキストファイルにはどうすればアクセスできますか?また、それを開くことができるかどうかをどうやって判断するのですか?

答えて

0

さて、すでにScannerを使ってファイルを読む方法を知っています。次に行う必要があるのは、Stringを分割して最初の4つの入力を抽出することだけです。ここで

コードスニペットです:

String s = in.nextLine(); 
int i = 0, digits[] = new int[4]; 
for(String inp : s.splits(" ")) { 
    if(i == 4) break; 
    digits[i++] = Integer.parseInt(inp); 
} 

注:私はあなたのファイルに入力はスペースで区切られていると仮定しています。そうでない場合は、split()のスペースを正しい区切り文字に置き換えることができます。

+0

私はこの問題を解決していないために私の質問に追加しました。何を修正するか知っていますか? – Darkhail

+0

@Darkhail 'inputFileName'でファイル名だけでなく、完全なパスを取得していて、あなたのプログラムが入力ファイルを開くことができたら幸いです。あなたはファイルの内容をうまく読み込んでいますが、あなたのファイルの中のすべての命令があれば、 'if(Integer.parseInt(s)<= 9){/*...*/}'線で区切られています。 – user2004685

0

入力フォーマットが固​​定されている場合、部分文字列メソッドを使用して文字列の異なる部分を取得することができます。詳細はドキュメントを参照してください。 https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)

例コード:

String s = "12345E"; 
    s.substring(0, 2); /* 12 */ 
    s.substring(2, 4); /* 34 */ 
    s.substring(4, 5); /* 5 */ 
    s.substring(5, 6); /* E */ 
0

あなたはこれを達成するために()メソッドの.getCharsを使用することができます。ここでjavadocは、この方法についてこう言われる、

ます。public void GetCharsは、この文字列から(int型srcBegin、 int型srcEnd、 のchar [] DST、 のint dstBegin) コピー文字先の文字配列に。 コピーする最初の文字はインデックスsrcBeginにあります。コピーされる最後の文字はインデックスsrcEnd-1にあります(したがって、コピーされる文字の総数はsrcEnd-sr​​cBeginです)。文字は、インデックスdstBeginから始まり、インデックスで終わるdstの部分配列の中にコピーされます。

dstbegin + (srcEnd-srcBegin) - 1 

パラメータ: srcBegin - コピーする文字列の最初の文字のインデックス。 srcEnd - コピーする文字列の最後の文字の後のインデックス。 dst - 出力先配列。 dstBegin - 出力先配列の開始オフセット。 例外: IndexOutOfBoundsException - 次のいずれかが当てはまる場合: srcBeginが負である。 srcBeginがsrcEnd が dstBeginが負で、この文字列の長さより大きいsrcEndよりも大きい dstBegin +(srcEnd-sr​​cBegin)dst.lengtよりも大きくなっている....ここ

はあなたが何ができるかです... 文字列を読み取って、その長さを取得します(必要なすべての文字が含まれていることを確認してください) この機能に不要な無関係な文字はすべて別の配列に読み込まれます。 文字列が配列に分割されると問題を解決する擬似コードを作成します。アレイの各位置が何をすべきかを知っているので、作業が非常に簡単です。

これは...あなたのプロジェクトに

幸運全く解決し難い問題ではありません。

関連する問題