java char数组查找_关于Java:在数组中搜索char

本文探讨了如何在Java中修改代码,从搜索整数数组转向处理字符数组,以实现子手游戏中的字母猜测功能。作者分享了如何在字符串数组中查找字符,以及如何使用ArrayList和Character对象来管理猜测过程。
摘要由CSDN通过智能技术生成

我正在创建一个Java程序,并且坚持在数组中搜索char的概念。

该代码用于创建一个子手游戏,其中一部分将显示需要猜测的单词长度的部分完成的,子手,一个字母和一组空格(" _")。每次猜测之后,我需要从字母表中猜出字母(这是我现在正在使用的部分),如果是正确的猜测,请用该字母替换单词中的空白,或者如果输入错误猜猜,完成另一条子手。

我只创建了代码来搜索数组中的数字,而不是char。我一直在浏览我的书和互联网,但找不到解决方案。

没人知道这样做的方法还是我在哪里可以找到方法?

抱歉,我已经发布了有关此作业的问题,但是要在几天内完成,所以我很努力。

到目前为止,这是我的代码(我苦苦挣扎的部分在最底部):

public static void main(String[] args)

{

String[] words =

{

"javascript","declaration","object","program","failing"

};

//generate random word from list

Random rnd = new Random();

String rndWord = words[rnd.nextInt(words.length)];

//gets length of generated word

char[] displayArray = new char[rndWord.length()];

//displays"_" for number of chars in word

for (int i = 0; i < rndWord.length(); i++)

{

displayArray[i] = '_';

}

char[] alphabet =

{

'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'

};

String hangman

="Let's Play Hangman!!" +"

"

+"-------------" +"

"

+"|" +"

"

+"|" +"

"

+"|" +"

"

+"|" +"

"

+"|" +"

"

+"|" +"

"

+"|" +"

"

+"|" +"

"

+"

" + Arrays.toString(displayArray) +"

"

+"      ";

JOptionPane.showMessageDialog(null, hangman +""

+ Arrays.toString(alphabet) +"");

}

//get letter

public static char guess()

{

String guessStr = JOptionPane.showInputDialog("Enter a letter to guess:");

// check if have at least one letter

if (guessStr.length() > 0)

{

}

char guessChar = guessStr.charAt(0);

return guessChar;

}

//remove guess from alphabet

private char[] getCharArray(char[] array)

{

//this is the part I'm not sure about

}

Ive only created code to search for numbers in arrays before, not chars.确实没有区别。

new String(yourCharArray).contains("" + yourChar)

对于这种类型的代码,也许应该使用List而不是数组。 它使您可以删除条目并轻松搜索它们。

为什么不使用String.replace(char,"");?

您可以使用contains()方法在列表中找到字符。 通过玩家输入的guessStr中的char c = guessStr.toLowerCase().toCharArray()[0];获取字符。 然后通过if (guessedCharList.contains(new Character(c)))在列表中搜索它。 列表只能存储对象,因此我们必须通过new Character(c)将char基本类型转换为对象Character。

在下面的代码将帮助您! 但是您应该对此进行优化。

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Random;

import javax.swing.JOptionPane;

public class HangMan {

private static List guessedCharList = new ArrayList();

private static List validCharList = new ArrayList();

private static String rndWord = null;

private static int numberOfWrongGuess = 0;

public static void main(String[] args) {

String[] words = {"javascript","declaration","object","program",

"failing" };

// generate random word from list

Random rnd = new Random();

rndWord = words[rnd.nextInt(words.length)];

System.out.println(rndWord);

// gets length of generated word

char[] displayArray = new char[rndWord.length()];

// displays"_" for number of chars in word

for (int i = 0; i < rndWord.length(); i++) {

displayArray[i] = '_';

}

char[] alphabet = { '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' };

String hangman = null;

boolean finished = false;

do {

hangman ="Let's Play Hangman!!" +"

" +"-------------" +"

"

+"|" +"

" +"|" +"

" +"|" +"

" +"|" +"

" +"|"

+"

" +"|" +"

" +"|" +"

" +"|" +"

" +"

"

+ Arrays.toString(displayArray) +"

" +"      ";

JOptionPane.showMessageDialog(null,

hangman +"" + Arrays.toString(alphabet) +"");

guess();

for (int i = 0; i < rndWord.length(); i++) {

if (validCharList.contains(rndWord.charAt(i)))

displayArray[i] = rndWord.charAt(i);

else

displayArray[i] = '_';

}

for (char c : displayArray) {

if (c == '_') {

finished = false;

break;

} else

finished = true;

}

if (numberOfWrongGuess >= 5) { // 5 wrong guess:"he was hanged."

JOptionPane.showMessageDialog(null,"Man was hanged!");

finished = true;

}

} while (!finished);

hangman ="Let's Play Hangman!!" +"

" +"-------------" +"

" +"|"

+"

" +"|" +"

" +"|" +"

" +"|" +"

" +"|" +"

"

+"|" +"

" +"|" +"

" +"|" +"

" +"

"

+ Arrays.toString(displayArray) +"

" +"      ";

JOptionPane.showMessageDialog(null,

hangman +"" + Arrays.toString(alphabet) +"");

}

// get letter

public static String guess() {

String guessStr ="";

while (guessStr == null || guessStr.trim().isEmpty()

|| guessStr.length() > 1) {

guessStr = JOptionPane.showInputDialog("Enter a letter to guess:");

}

char c = guessStr.toLowerCase().toCharArray()[0];

if (guessedCharList.contains(new Character(c))) {

JOptionPane

.showMessageDialog(null,"You already give that answer!");

guess();

}

guessedCharList.add(new Character(c));

if (rndWord.contains(c +"")) {

validCharList.add(new Character(c));

return c +"";

} else {

numberOfWrongGuess++;

return"";

}

}

}

哇,非常感谢您抽出宝贵的时间来整理这些内容。 这在很多层面上帮助了我!

问题是数组初始化后无法更改大小。 一些解决方案是:

您可以使用一个列表(例如java.utils.ArrayList)。 这样,您就可以动态搜索和删除条目。

另一种可能性是使用一个不使用的字符,例如"-"。 您可以替换字符,而不是删除条目。 这样,您必须在访问阵列时进行检查。

import java.util.HashMap;

import java.util.Map;

public class MatchingWordsInStream {

Map < String, Integer > map;

String input;

char arr[];

int valueArr[];

StringBuffer stringArr[];

int space = 1;

public MatchingWordsInStream(String input) {

this.input = input;

}

public void initialiseCharArray() {

arr = new char[input.length()];

for (int i = 0; i < input.length(); i++) {

arr[i] = input.charAt(i);

if (arr[i] == ' ') space++;

}

}

public void rCharCalculate() {

stringArr = new StringBuffer[space];

valueArr = new int[space];

stringArr[0] = new StringBuffer();

int index = 1;

for (int i = 0; i < input.length(); i++) { //this loop make string array char

ch = arr[i];

if (ch == ' ') {

stringArr[index] = new StringBuffer();

++index;

} else {

stringArr[index - 1] = stringArr[index - 1].append(arr[i]);

}

}

for (int k = 0; k < stringArr.length; k++) {

StringBuffer s = stringArr[k];

for (int j = 0; j < stringArr.length; j++) {

if (s.toString().equals(stringArr[j].toString())) {

valueArr[k] += 1;

}

}

}

}

public void result() {

map = new HashMap < String, Integer > ();

for (int i = 0; i < stringArr.length; i++) {

map.put(stringArr[i].toString(), valueArr[i]);

}

System.out.println(map);

}

public static void main(String[] args) {

MatchingWordsInStream obj = new MatchingWordsInStream("$INDIAN$ wangi bk. wangi bk. 1010 0101 0101 hi hi ii ii ii ii");

obj.initialiseCharArray();

//make string to char array

obj.rCharCalculate();

obj.result();

//just for display

}

}

}

欢迎使用Stack Overflow! 虽然此答案可能是正确且有用的,但如果您在其中包含一些解释以说明它如何帮助解决问题,则最好使用该答案。 如果发生更改(可能不相关)导致它停止工作,并且用户需要了解它曾经如何工作,那么这在将来特别有用。 谢谢!

除了创建两个非常糟糕的答案,您还可以创建一个格式不正确且包含说明的答案,这样(至少)会有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值