Dosyaları bir dosyadan alan ve bunları yatay veya dikey olarak basan bir matris programı oluşturdum. Program, bir sözcüğün karakterinin zaten yerinde olup olmadığını ya da düzgün yazdırıldığından emin olmak için spotun boş olup olmadığını kontrol eder. Bir kelime veya karakter başka bir sözcüğün veya karakterin üzerine basılırsa, kelimeyi koymak için yeni bir nokta oluşturulur. Bu sözcük hatasız yazdırılıncaya kadar yapılır. Boş alanlar 'A' harfi ile doldurulur.Bu programdaki bir matris yazdırılan hata nerede?
import java.util.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class WordSearch {
public WordSearch() {
}
public void getMatrix() throws FileNotFoundException {
File file = new File("/home/cameron/Desktop/words");
ArrayList<String> words = new ArrayList<String>();
String largest = "";
char[][] data;
int col = 0;
Scanner sc = new Scanner(file);
while (sc.hasNextLine()) {
String first = sc.nextLine();
words.add(first);
if(first.length()>largest.length()){
largest=first;
col=largest.length();
}
}
data = new char[col][col];
int curWord=0;
for(int i=0; i<words.size(); i++){
String word=words.get(curWord);
int start=0;
int row=0;
int choice=0;
int index=0;
do
{
start = (int)(Math.random()*data.length);
row = (int)(Math.random()*data.length);
choice = (int)(Math.random()*2);
}
while(start+word.length()>data.length);
index=0;
if(choice==0){
for(int j=start; j<start+word.length(); j++){
if(data[row][j]==0 || data[row][j]==word.charAt(index)){
data[row][j] = word.charAt(index);
index++;
}
else{ i=0; continue;}
}
}
if(choice==1){
for(int j=start; j<start+word.length(); j++){
if(data[j][row]==0 || data[j][row]==word.charAt(index)){
data[j][row] = word.charAt(index);
index++;
}
else{ i=0; continue;}
}
}
curWord++;
}
for(int i=0; i<data.length; i++){
for(int j=0; j<data[i].length; j++){
if(data[i][j]==0)
System.out.print("A ");
else
System.out.print(data[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args) throws FileNotFoundException {
WordSearch check = new WordSearch();
check.getMatrix();
}
}
ben kelimenin karakteri sonra for loop
(do while
yukarıda bir) emin olmak için yeniden edebileceği farklı karakter veya kelime üzerine basılmış olsaydı bir if else
deyimi kurmak kelime doğru yazdırılır.
Yine de bir sorun yaşıyorum. Program yaklaşık% 50 iş gibi görünüyor ve böyle bir şey yazdırır:
A A h A A A A f A
A A a A A l A e A
A A m A A a A n A
A A b A A d A c A
A A u A A y A e A
A A r A A b A A A
A A g A A u A A A
A A e A A g A A A
A A r A A A A A A
Bazen bu hatayı ve (bu özel dizinde) yalnızca bu hatayı alıyorum:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at WordSearch.getMatrix(WordSearch.java:59)
at WordSearch.main(WordSearch.java:132)
sorun ne olabilir ?
Düzenleme: Burada dosyadan programa nelerin okunduğunu geçerli:
ladybug
hamburger
fence
Can Hatayı oluşturan programa girişinizi gösterir misiniz? – pczeus
Eğer (seçim) bloklarınızda ne yapmaya çalışıyorsunuz? – pczeus
@pczeus Bunun için üzgünüz. Alttaki orjinal yazıya koydum. – clopez