[解決済み】配列は必要だが、java.lang.Stringが見つかった
2022-02-12 11:55:22
質問
テキストファイルのリストから取得したランダムな単語を隠そうとしているのですが、コードは次のようなエラーを出し続けています。
Array Required, but java.lang.String found
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.List;
public class Hangman extends JFrame
{
private static final char HIDECHAR = '_';
String imageName = null;
String Path = "D:\\Varsity College\\Prog212Assign1_10-013803\\images\\";
static int guesses =0;
private String original = readWord();
private String hidden;
int i = 0;
static JPanel panel;
static JPanel panel2;
static JPanel panel3;
static JPanel panel4;
public Hangman(){
JButton[] buttons = new JButton[26];
this.original = original;
this.hidden = this.createHidden();
panel = new JPanel(new GridLayout(0,9));
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();
JButton btnRestart = new JButton("Restart");
btnRestart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
}
});
JButton btnNewWord = new JButton("Add New Word");
btnNewWord.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
try
{
FileWriter fw = new FileWriter("Words.txt", true);
PrintWriter pw = new PrintWriter(fw, true);
String word = JOptionPane.showInputDialog("Please enter a word: ");
pw.println(word);
pw.close();
}
catch(IOException ie)
{
System.out.println("Error Thrown" + ie.getMessage());
}
}
});
JButton btnHelp = new JButton("Help");
btnHelp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
String message = "The word to guess is represented by a row of dashes, giving the number of letters and category of the word."
+ "\nIf the guessing player suggests a letter which occurs in the word, the other player writes it in all its correct positions."
+ "\nIf the suggested letter does not occur in the word, the other player draws one element of the hangman diagram as a tally mark."
+ "\n"
+ "\nThe game is over when:"
+ "\nThe guessing player completes the word, or guesses the whole word correctly"
+ "\nThe other player completes the diagram";
JOptionPane.showMessageDialog(null,message, "Help",JOptionPane.INFORMATION_MESSAGE);
}
});
JButton btnExit = new JButton("Exit");
btnExit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
JLabel lblWord = new JLabel(original);
if(guesses >= 0) imageName = "Hangman1.jpg";
if(guesses >= 1) imageName = "Hangman2.jpg";
if(guesses >= 2) imageName = "Hangman3.jpg";
if(guesses >= 3) imageName = "Hangman4.jpg";
if(guesses >= 4) imageName = "Hangman5.jpg";
if(guesses >= 5) imageName = "Hangman6.jpg";
if(guesses >= 6) imageName = "Hangman7.jpg";
ImageIcon icon = null;
if(imageName != null){
icon = new ImageIcon(Path + File.separator + imageName);
}
JLabel label = new JLabel();
label.setIcon(icon);
String b[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for(i = 0; i < buttons.length; i++)
{
buttons[i] = new JButton(b[i]);
panel.add(buttons[i]);
}
panel2.add(label);
panel3.add(btnRestart);
panel3.add(btnNewWord);
panel3.add(btnHelp);
panel3.add(btnExit);
panel4.add(lblWord);
}
public String readWord()
{
try
{
BufferedReader reader = new BufferedReader(new FileReader("Words.txt"));
String line = reader.readLine();
List<String> words = new ArrayList<String>();
while(line != null)
{
String[] wordsLine = line.split(" ");
boolean addAll = words.addAll(Arrays.asList(wordsLine));
line = reader.readLine();
}
Random rand = new Random(System.currentTimeMillis());
String randomWord = words.get(rand.nextInt(words.size()));
return randomWord;
}catch (Exception e){
return null;
}
}
private String printWord(){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < this.original.length(); i++){
sb.append(HIDECHAR);
}
return sb.toString();
}
public boolean check(char input){
boolean found = false;
for (int i = 0; i < this.original.length(); i++){
if(this.original.charAt(i)== input)){
found = true;
this.hidden[i] = this.original.charAt(i);
}
}
return found;
}
public static void main(String[] args)
{
System.out.println();
Hangman frame = new Hangman();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Box mainPanel = Box.createVerticalBox();
frame.setContentPane(mainPanel);
mainPanel.add(panel, BorderLayout.NORTH);
mainPanel.add(panel2);
mainPanel.add(panel4);
mainPanel.add(panel3);
frame.pack();
frame.setVisible(true);
}
}
さて、これがコード全体です< エラーは現在151行目と149行目にあります...。私はまた、ある投稿に従ってそれを修正しようとしました。
解決方法は?
配列の添え字が使えない。
[]
へのインデックスを作成するために
String
と、両方の
hidden
と
original
は
Strings
.
代わりに
original.charAt(i)
から
読む
インデックスで文字を指定します。
については
ライティング
インデックスで1文字: java
Strings
は immutable なので、個々の文字を変更することはできません。代わりに
hidden
a
StringBuilder
または、単に
char[]
:
// in your class member declarations:
char hidden[] = createHidden();
// possible implementation of createHidden:
char[] createHidden()
{
if (original != null)
return new char[original.length()];
else return null;
}
そして、ループは
original.charAt
というように
if (this.original.charAt(i) == input)
{
found = true;
this.hidden[i] = this.original.charAt(i);
関連
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】javaで指定されたファイルが見つからない
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】破損したjarファイル
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み】純粋なJUnitテストにVisibleForTestingを使用する方法
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。