Replacing parts of a string with characters JAVA - java

I know I was here earlier asking something similar, but I think I have narrowed down what i want to ask.
Ok, so I am making a program that plays the game of hangman on the jedit console. The user will guess one character at a time. At the beginning of the game, the program will display asterisks the same length of the word they are guessing. They have as many guesses as letters in the word. When they get a letter correct, the program will display the letters in place of asterisks. Here is an example of what the console should look like.
if the word is homework ********
they guess the letter e ***e**** (the bold e just happened because stars so that, it doesn't need to be bold)
then they guess the letter h h**e****
etc until there are no more asterisks
So I created a method that prints out the number of asterisks based on the number of letters in the word. I don't know how to place the letters in the place of the asterisks. I want to know if I should make a method that replaces the asterisks, or how else I can go about this. Thank you in advance for the help.
p.s I am not asking for anyone to dump code on me, that is not what I want. Just having help, and me having someone to ask questions to about things that I don't understand would be nice. by the way, I am in an intro to computer science class, so my knowledge of java is fairly low.

There are many ways you could approach this. The first that popped into my head is that you could start with a char[] the same length as the answer string. Look up the Arrays class for an easy way to fill it with asterisks. As the user guesses letters, search the answer string for that letter and replace the corresponding indexes of the char[]. Then construct a String from the char[] and display it.

Why not make something more clever, make a list of all the chars guessed so far and each time you want to print the word just go over each letter and replace it with * if not in the set.
Short: make a set of all the guesses so far. You don't have to work on the same data structure as you show the user.

I would use a list of characters instead of String for ****.
List<Character> hiddenWord = new ArrayList<Character>();
Instantiate the list with the number of * you need.
Create a function that will receive the guessed letter.
Check if the word contains that letter (use indexOf(int ch, int fromIndex) repeatedly until you get -1 - read about it here), and for each result you get that is !=-1, set the position in the array to be that letter (something like hiddenWord.set(poz, letter), where poz is the result of indexOf and letter is the guessed letter).

You can use StringBuffer insead String. In class StringBuffer exists method setCharAt.
Breifly, you will have variable String word - for guessing word, and StringBuilder guess for asterisks and guesed letters. When letter is guessed you will update guess with setCharAt.

Related

Making a Hyperwebster Dictionary

I just watched a VSauce video and he mentioned that the Hyperwebster dictionary consists an infinite amount of words, but each character after another is the next in the English alphabet. Under that logic, every name, joke, phrase, book, and insult has been written in the dictionary. Basically, it lists words like this:
AAAAAA
AAAAAB
AAAAAC
..
ZZZZZZ
and this can be at any length. In my case, I just want a max of 3 characters (because that is 26^3 which is already a huge number, I don't want my compiler to break). I have a basic idea of how to do this, but I don't know how to apply each 'char' variable to be in order (as in ABC, not something random like QLD).
Another scenario I am interested in is making the first letter "index" so I can have it set to "Series A, Series B, etc.) but that would only add to the complexity. I want to be able to change the number of characters it will try to find. Also, I don't want a GUI obviously. Just output into the console.
I just wanted to know how I would go about doing something like this and how I can set it so it will create System.out.println(char1 + char2 + char3); and each output is a new thing like "aaa" "aab" "aac"
This is a better specification than your original question. Here's a suggestion:
char first = 'a';
first++;
System.out.println(first);
>>>'b'
Given the above behavior, we can write a loop:
for (char first = 'a'; first <= 'z'; first++) {
System.out.print(first);
}
Because chars have underlying number representations, which we can treat like integers, but since System.out.println looks for string representations of objects, when it sees a char type it knows to print the character, not the integer.

Java string loop pattern

I'm going through some introductory exercises and I can not understand how to get java to output a string of five letters in the particular pattern shown below.
Initially I thought it followed the tribonacci sequence for number of characters per line. Without just printing the line, I can not figure out how to have java logically replicate the pattern. They seem to copy each other, but don't really follow a pattern.
The strings are palindrome and getting its end from the last string, for example; line 2 has "ABA" string, so line 3 will copy "ABA" at its end and will insert character C in the middle, so the final string will be "ABACABA"
String LastPattern="";
for(int i=0;i<5;i++){
System.out.println( LastPattern + (char)(65+i) +LastPattern);
LastPattern=LastPattern + (char)(65+i) +LastPattern;
}
Maybe this gets you going:
Something
Something New Something
Something New Something Newer Something New Something
The pattern is there, right in front of you.

Capital and Lower case

Im writing a program that holds the alphabet on a string. Along with this, I'm adding scanner that allows the user to input a character. When the user inputs their character it tells them what letter of the alphabet it is by using the charAt(index)
. I've gotten all this to work. The only thing I'm trying to get is the display to tell the user if he/she entered an upper case or lower case letter. Any clues on how I can do this?
You can use Character.isLowerCase() and Character.isUpperCase() to check an individual char.
You can use Character.isUppercase(Character toCheck)
Java have two string manipulation methods called toLowerCase() and toUpperCase() that do exactly what they sound like.

How to make a scanner in Java that checks if the first letter is a character between A-V and if the second character is a number between 1-20?

How to make a scanner that checks if the first letter is a character between A-V and if the second character is a number between 1-20? Some examples are: '.B4', 'H10.', '**V1', 'L19*', 'M12', or 'N14'.
I'm kind a new to Java. Still learning it in school. I've followed the lessons for about half a year now.
Now I've got an assignment for school. It is about creating a text-based minesweeper. I succeeded in printing the board and placing the mines. But now I'm stuck on getting the right input.
If you use '*' in the scanner like * B4 or B4* it should mark a square.
If you use '.' in the scanner like .B4 or B4. it should unmark a square.
And if you enter B4 it should open.
But I can't get this done in a neat way. I've tried to make sub-strings of it to check if every character is the right one but after I did that my code was kind of chaotic and it didn't work as supposed to.
I've tried it like: "Example 3 : Validating vowels in: Validating input using java.util.Scanner" only I used a variable of the length of my board. So if the board was 10 by 10 it wouldn't go further than J10. But that didn't work either for me.
So I was hoping that you could help me solving this problem.
As this is an assignment, I'll just give you a guideline rather than actual code.
First, you need to get the input into some format. Consider reading the input in from the scanner and storing it into a string.
We can then make use of Java's String functions, a list of which can be found here. Try to find a function that could be useful, perhaps one that lets us get the character at a certain index.
We can then do checks on the string. First we check the first character (the character at index 0), we want to know if that is a letter from A-V. To do this we can do a check on the ASCII numbers. Assuming you just want capital letters, if we convert A to an int, then it will have the value 65. V has the value 86. All the numbers in between correspond to the ASCII values of the letters in between.
Thus we can do a check, convert the first character to an integer, let's call it x. If x >= 65 && x <= 86, then it's a letter we can care about.
Next, you need to do the number checking. For this, take a look at the function Integer.parseInt(String s). It takes a String and then converts it to an integer. You'll have to do some checks to see if it's >= 10 or <10.

Need help writing a descrambling method for substitution cipher

I need some help on a Java assignment. We are given a scrambled text file, which was scrambled using a substitution cipher, where every letter in the text is simply swapped out for another letter. My program is almost finished, but I'm having trouble figuring out how to write the final "descramble" method, which takes the scrambled text and replaces each letter with its correct substitute in order to reveal the correct text.
These are the instructions provided in the assignment:
The descrambling is done by using the letter in the scrambled text as the index in the char array. For example, if the scrambled text has a letter B, you replace it with the character it index 2 in the array. All whitespace and punctuation from the original file should also be in the descrambled file, only the letters should have been changed. Additionally, if a letter was capitalized in the original file, it should be capitalized in the descrambled file (similarily, lowercase letters should still be lowercase).
I'm not asking to have the answer given to me, since this is for school. I just can't seem to properly understand these instructions, what exactly is it that I need to do to successfully decode the text? Mostly, I don't understand how I can use a letter as an index for a char array, aren't indexes always integers?
You didn't say what language you're working in, so I'll use C/Java. You'll want to compute an integer index. Assume for the moment that scrambled_char is an upper case letter then it's:
// index into descrambling array:
int index = scrambled_char - 'A' + 1;
This has value 1 for character A, 2 for B, etc. as the problem says. It sounds like you're being given the descrambling array. For example:
char descramble[] = "_ZYX ... ";
This would cause A to be translated to Z, B to Y, C to X, ...
The descrambled character will be
char descrambled_char = descramble[index];
Now you just need to work out how to handle lower case letters, white space, and punctuation.

Categories