keep getting an error - java

why do i keep getting an error on "int numLength = palNum1.length();?" im trying to finish this lab that im doing for my java class and im stuck on this part. any help would be appreciated.
import java.util.*;
public class Lab6
{
public static void main (String [] args)
{
String pal1, pal2="";
int palNum1, palNum2, choice;
Scanner in = new Scanner(System.in);
System.out.println("Word(w) or Number(n)?");
choice = in.nextLine().charAt(0);
if (choice == 'w') {
System.out.println("Enter a word: ");
pal1= in.nextLine();
int length = pal1.length();
for ( int i = length - 1 ; i >= 0 ; i-- )
pal2 = pal2 + pal1.charAt(i);
if (pal1.equals(pal2))
System.out.println("The word you entered is a palindrome.");
else
System.out.println("The word you entered is not a palindrome.");
}
else{
System.out.println("Enter a bunch of numbers: ");
palNum1 = in.nextInt();
int numLength = palNum1.length();
for ( int j = numLength - 1 ; j >= 0 ; j-- )
palNum2 = palNum2 + palNum1.charAt(j);
if (palNum1.equals(palNum2))
System.out.println("The numbers you entered is a palindrome.");
else
System.out.println("The numbers you entered is not a palindrome.");
}
}
}

As dasblink said, primitave types don't have methods.
Given what you're trying to do if they enter an integer, you should convert it to a String then basically repeat the code from the first part. Instead of:
System.out.println("Enter a bunch of numbers: ");
palNum1 = in.nextInt();
int numLength = palNum1.length();
for ( int j = numLength - 1 ; j >= 0 ; j-- )
palNum2 = palNum2 + palNum1.charAt(j);
Easy thing to do is convert the int they enter into a String, then repeat code from before:
System.out.println("Enter a bunch of numbers: ");
palNum1 = in.nextInt();
// Conver it to String to allow you to easily check if its a palindrome.
pal1 = Integer.parseInt(palNum1);
int numLength = pal1.length();
for ( int j = numLength - 1 ; j >= 0 ; j-- )
pal2 = pal2 + pal1.charAt(j);
palNum2 is never needed.
EDIT:
Sorry if I confused you, I meant that you read in the palindrome as an int(same as you originally did), but then you convert it to a String, then treat it as before.
complete code for the else:
else{
// If you are here, user is entering an int.
System.out.println("Enter a bunch of numbers: ");
palNum1 = in.nextInt();
pal1 = Integer.parseInt(palNum1);
int numLength = pal1.length();
for ( int j = numLength - 1 ; j >= 0 ; j-- )
pal2 = pal2 + pal1.charAt(j);
if (pa1.equals(pal2))
System.out.println("The numbers you entered is a palindrome.");
else
System.out.println("The numbers you entered is not a palindrome.");
}

Related

why the count result do not meet the real result

when i run this code and enter first grade 4 and second is 3 the count should be 2 and the avareg is 3
why the result do not be that?
public static void main (String args[]){
Scanner input = new Scanner (System.in);
System.out.println("enter your grade or -1 to exit ");
int grade = 0 , sum = 0 , count = 1;
while (count <= 5 && grade != -1) {
System.out.println("the grade no " + count);
grade = input.nextInt();
sum += grade;
count++;
}
System.out.println("the avareg is = " + sum/count);
System.out.println(sum);
System.out.println(count);
}
Count start at one and it should start at 0.
At first input, count become 2 and at second input it becomes 3.
I did the folowing changes and it works :
public class myClass {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
System.out.println("enter your grade or -1 to exit ");
int grade = 0 , sum = 0 ,count = 1 ;
for (; count<=5 && grade!=-1 ;count++) {
System.out.println("Enter " + count + ": ");
grade = input.nextInt();
sum = sum+grade ;
}
System.out.println("the avareg is = " + (sum+1)/(count-2));
System.out.println("sum= "+(sum+1));
System.out.println("count= "+(count-2));
}
}
I just add 1 to sum and taked 2 from count

How am i going to use while loop and if else if user enter the same input twice and it will try again

I want to apply this function in java. Inside while loop, you need to input number of repetition you want to input a number. if you input a number that equals to the number that you enter previously, it will repeat a loop and enter a number again. This code is not finish yet. I hope u understand what i want to achive. thank you
System.out.print("Enter number of times: ");
int times = number.nextInt();
int i = 1;
while ( i <= times){
System.out.print("Enter a number : ");
int input = number.nextInt();
i++;
if( input == input){
System.out.println("It is already taken");
}
}
}
}
Let's use a temp variable to store the value of previous input. If new input is same as previous input, the iterator i should not increase, so we use i--
System.out.print("Enter number of times: ");
int times = number.nextInt();
int i = 1;
int temp=0;
int inputArray[] = new int[times];
while ( i <= times){
System.out.print("Enter a number : ");
int input = number.nextInt();
i++;
if( input == temp){
System.out.println("It is already taken");
i--;
}else {
inputArray[i-2]=input;
}
temp=input;
}
}
The thing with that solution is that is only checks for the number just entered before the current one. I understood that you want to check that the number the user entered is unique and it has to be checked against every number that he/she has entered before.
See the code for that:
import java.util.Scanner;
import java.util.ArrayList;
public class testMe{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("Enter number of times: ");
int times = scanner.nextInt();
int i = 0;
ArrayList<Integer> listWithEntries = new ArrayList<Integer>();
while (i < times){
System.out.print("Enter a number : ");
int input = scanner.nextInt();
if(listWithEntries.size() == 0){
listWithEntries.add(input);
i++;
} else {
for(int j = 0; j < listWithEntries.size(); j++){
if(input == listWithEntries.get(j)){
System.out.println("It is already taken!");
break;
}
if(j == listWithEntries.size()-1 && input !=
listWithEntries.get(j)){
listWithEntries.add(input);
i++;
break;
}
}
}
}
}
}

Strings B word assignment

I have to write a program where a user to enter 5 words, these words must be stored into a string array. When the user is finished, you must display the number of times a word beginning with the letter ‘B’ was entered, lower or uppercase, and also re-state the B words. I can't get it to tell me how many 'B' words there is and what they are.I use java, ready to program since I'm a student, I don't use scanner and all that
//Asking user to input 5 words
System.out.println ("Please enter 5 words");
System.out.println ("====================");
//set up loop so that x is the index variable going from 0 to 4
//fill words array with five words
int fromIndex = 0;
int counter = 0;
for (int x = 0 ; x <= 4 ; x = x + 1)
{
System.out.print (" ");
words [x] = keyboardInput.readLine ();
//change word to lowercase
String lower = words[x].toLowerCase();
while(fromIndex !=-1)
{
fromIndex = lower.indexOf("b",fromIndex);
if (fromIndex !=-1)
{
//character was matched
counter = counter + 1;
fromIndex++;
}
}
}
System.out.print ("You entered " + counter + " 'B' words and they were: ");
This is what I get:
Please enter 5 words
Food
Billy
Sill
Bear
Pop
You entered 0 'B' words and they were:
You never reset your fromIndex, and you don't need a fromIndex or a while loop like that. I would use String.startsWith(String). Like,
for (int x = 0; x < 5; x++) {
System.out.print(" ");
words[x] = keyboardInput.readLine();
if (words[x].toLowerCase().startsWith("b")) {
counter++;
}
}
Alternatively,
if (Character.toLowerCase(words[x].charAt(0)) == 'b') {
counter++;
}
You can Use indexOf function on your String. If that is 0 it means your word Starts with b.
for (int x = 0 ; x <= 4 ; x = x + 1)
{
System.out.print (" ");
words [x] = keyboardInput.readLine ();
//change word to lowercase
String lower = words[x].toLowerCase();
if(lower.indexOf("b") == 0){
counter++;
}
}
System.out.print ("You entered " + counter + " 'B' words and they were: ");
Here is the complete version:
public class Bwords {
public static void main(String [] args){
java.util.Scanner input=new java.util.Scanner(System.in);
System.out.println ("Please enter 5 words");
System.out.println ("====================");
String[] words = new String[5];
int count=0;
String [] b_words=new String[5];
for (int x = 0; x <= 4; x++) {
System.out.print(x+1+" word: ");
words[x] = input.next();
if (words[x].toLowerCase().startsWith("b")) {
count++;
b_words[x]=words[x];
}
}
System.out.print ("You entered " + count + " 'B' words and they were: ");
for (String b_word : b_words) {
if (b_word != null)
System.out.print(b_word + " ");
}
}
}
Output
Please enter 5 words
1 word: Food
2 word: Billy
3 word: Sill
4 word: Bear
5 word: Pop
You entered 2 'B' words and they were: Billy Bear

Java scanner - allowing a certain number of ints

Really struggling to find the answer to this.
I'm creating a game where it asks how many players there are and the max number of players the user can enter is 3 (either 1, 2 or 3). Is this creating a for loop or can I just enter a parameter in the scanner function?
Code below:
System.out.println(" How many players are there? ");
int numberOfPlayers = scan.nextInt();
Player[] players = new Player[numberOfPlayers]; //this is where the players scores are stored
int currentPlayer = 0; //because arrays start at 0: +1 is added
for (int i = 0; i < numberOfPlayers; i++) {
System.out.println("What is player " + (i + 1) + " called?");
String playerName = scan.next();
players[i] = new Player(playerName);
You can use Scanner's nextLine() which reads the newline instead of next() as shown below:
System.out.println(" How many players are there? ");
int numberOfPlayers = Integer.parseInt(scan.nextLine());
Player[] players = new Player[numberOfPlayers];
for (int i = 0; i < numberOfPlayers; i++) {
System.out.println("What is player " + (i + 1) + " called?");
String playerName = scan.nextLine();
players[i] = new Player(playerName);
}
I suggest to use Integer.parseInt(scan.nextLine()) with a loop for example :
int numberOfPlayers = 0;
boolean correct = false;
do {
try {
System.out.println(" How many players are there? ");
numberOfPlayers = Integer.parseInt(scan.nextLine());
if (numberOfPlayers >= 1 && numberOfPlayers <= 3) {
correct = true;
}
} catch (NumberFormatException e) {
}
} while (!correct);
So if the user enter incorrect number or a number > 3 or < 1 it will ask the user to enter the number again until the the user enter the correct number 1,2,3

Hangman stats error

My code does not show the number of wins, losses and numberOfGames I had played.
I've been trying to fix it for the last month and I'm going nowhere!
import java.util.Random;
import java.util.Scanner;
public class HangmanP2 {
public static void main(String[] args) {
Scanner Input = new Scanner(System.in);
String first, reverse = "";
String second, reverse2 = "";
Scanner in = new Scanner(System.in);
System.out.println("Welcome to Hangman!");
System.out.println("Enter your first name.");
first = in.nextLine();
System.out.println("Enter your last name to play.");
second = in.nextLine();
int length = first.length();
int length2 = second.length();
for ( int i = length - 1 ; i >= 0 ; i-- )
reverse = reverse + first.charAt(i);
reverse = reverse.substring(0,1).toUpperCase() + reverse.substring(1).toLowerCase();
for ( int i = length2 - 1 ; i >= 0 ; i-- )
reverse2 = reverse2 + second.charAt(i);
reverse2 = reverse2.substring(0,1).toUpperCase() + reverse2.substring(1).toLowerCase();
System.out.println("Your name entered in reverse is: "+reverse+" "+reverse2);
startGame(reverse,reverse2);
}
public static void startGame(String reverse,String reverse2){
Random rnd = new Random ();
Scanner user = new Scanner (System.in);
String guess = "";
String message = "";
int count = 1;
boolean quit = false;
String fullWord = "";
int wins=0;
int loss=0;
int numberOfGames=0;
int guessC = 5;
String usedLetters ="";
String remainingLetters ="";
String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int hinter = 0;
int z = rnd.nextInt(10);
int k = rnd.nextInt(2);
String words[][] = {{"earth","stars","light",
"world","about","again",
"stars","light","music",
"happy","water","amber",
"apple","piano","green",
"mouth","suger","stone",
"japan","china","after","lemon",
"grand",
"lives","twice","print"},{"smile",
"puppy","latin","vegan","phone","april",
"south","house","hangs","woman",
"power","today","india","night","candy",
"forum","birth","other","chris","irish",
"paste","queen","grace","crazy","plant",
"knife","spike","darth","vader","eagle",
"egypt","range","fists","fight","glory",
"March","smart","magic","codes","rolls",
"match","honor","glass","board","teams",
"bully","zebra","under","mango","brain",
"dirty","eight","zeros","train","cycle",
"break","necks","terms","slide","large"},{"stake","guess","wrong","anime","stick","outer","input"},{ "thing","write","white","black"}};
//Prints info of the game and topic that as been selected
System.out.println("Welcome to Hangman"+" "+reverse+" "+reverse2);
//This prints the '-' and spaces for the first run of the game only
for(int index = 0; index < words[z][k].length();index++)
{
Character variableInt = words[z][k].charAt(index);
if(variableInt != ' ')
{
message += "-";
}
else
{
message += " ";
}
}
//Nothing will change, this prints information to the user about his current status in-game.
System.out.println("Secret word: \t\t" + message);
System.out.println("Letters Remaining: " + letters);
System.out.println("Letters Used: ");
System.out.println("Guesses Remaining: " + guessC);
//The loop that will continuously run the game, until the user fails or does not want to play again.
do{
//The following variable's make sure there is not stacking from previous data when the loop runs again.
remainingLetters = "";
count = 0;
//Ask the user for a letter to guess
System.out.println("\nEnter a letter to guess the word): ");
guess = user.nextLine();
//The following for-loop converts ASCII table [A-Z] to actually characters and if the player used a letter it will not show up or add to the string each run of the do-loop.
for(int x = 65; x < 91;x++){
Character current = new Character ((char)x);
String current2 = current.toString();
if(!usedLetters.contains(current2)){
remainingLetters += current;
}
}
//Converts the user's first character to a string which is converted into another character and again converted into a String (Seem's useless) but i used it this way cause i was getting an error.
Character convert = new Character (guess.charAt(0));
Character conv = new Character (convert);
String converted = convert.toString();
//The letters the player uses will be added to a string, if it has not already been added and only if it is a letter.
if(!usedLetters.contains(converted) && conv.isLetter(convert)){
usedLetters+=guess.charAt(0);
}
//Inside this for-loop it turns our word into a String and the user's first character into a string.
for(int index = 0; index < words[z][k].length();index++){
//This is a helper
count++;
//Conversion of variables
Character current2 = new Character ( words[z][k].charAt(index));
String current = current2.toString();
Character current3 = new Character (guess.charAt(0));
String current4 = current3.toString();
String current5 = current4.toUpperCase();
String current6 = words[z][k].toUpperCase();
//If the players gets a letter correct, do the following.
if(current4.equalsIgnoreCase(current))
{
//Add's on to the previous string from where the player got it correct and change it to the correct letter instead of a '-'.
message = message.substring(0,index) + guess + message.substring(index + 1);
}
//If the player gets it wrong and the helper variable is equal to 1 (so that it does not follow the loop of the for-loop and it is not one of the special characters in the game('!' or '?').
if(!current6.contains(current5) && count == 1 && guess.charAt(0) != '?' && guess.charAt(0) != '!'){
guessC--;
}
}
//Prints information to the user of their current topic
//The secret word the player has to guess
System.out.println("Secret word: \t\t" + message.toUpperCase());
//The letters in the alphabet that have not been used yet
System.out.print("\nLetters remaining: ");
System.out.print(remainingLetters.toUpperCase() + "\n\n");
//This will print a message to the user, telling them information on using a hint or the hint itself.
//Letters the user has used since the game session has been running
System.out.print("\nLetters Used: ");
System.out.print(usedLetters.toUpperCase() + "\n");
//The amount of guesses the player has left
System.out.println("\nGuesses Remaining: " +guessC );
//If the player enters a '?' it will do the following.
if(guess.charAt(0) == '?'){
if(hinter <2){
//Displays what is in the array and information about the delay, while losing guesses.
hinter++;
System.out.print("\nHint will appear after next guess! \n");
guessC -=2;
}
}
//If the user guesses the word correct
if(message.equalsIgnoreCase(words[z][k])){
System.out.println("YOU ARE CORRECT! " + words[z][k] + " is correct!");
wins++;
quit = true;
}
//If the user ask to guess the entire word it is stored in a separate variable and make quit equal to true.
if(guess.charAt(0) == '!')
{
System.out.print("\nEnter the secret word: ");
fullWord = user.nextLine();
//if the user guesses the word correct then it will tell the user they are correct and make quit equal to true.
if(fullWord.equalsIgnoreCase(words[z][k])){
System.out.println("YOU ARE CORRECT! " + words[z][k] + " is correct!");
wins++;
quit = true;
}
//If the user does not get it right it will tell the user they are wrong and make quit equal to true.
else{
System.out.println("YOU ARE INCORRECT! the word is: " + words[z][k] + " ");
loss++;
quit = true;
}
}
//If the guesses counter equal 0 then it will tell them that they have lost and make quit equal to true.
if(guessC == 0){
System.out.println("GAME OVER! The secret word was [ " + words[z][k] + " ]!");
loss++;
quit = true;
}
//This is what happens when quit eventually becomes true, the user is asked if they would like to play again.
if(quit == true){
System.out.println("\nWould you like to play again (Y or quit)? ");
System.out.println("\nOr type [stats] to check your work");
guess = user.nextLine();
//If they do want to play again, they will need to enter Y and if they do it will give them another word to guess and resets there information so that there will be no overlap.
if(guess.equalsIgnoreCase("Y")){
quit = false;
z = rnd.nextInt(10);
k = rnd.nextInt(2);
guess = " ";
guessC = 6;
message = "";
usedLetters = "";
hinter = 0;
for(int index = 0; index < words[z][k].length();index++)
{
Character variableInt = words[z][k].charAt(index);
if(variableInt != ' ')
{
message += "-";
}
else
{
message += " ";
}
}
System.out.println("Secret word: \t\t" + message);
System.out.println("Letters Remaining: " + letters);
System.out.println("Letters Used: ");
System.out.println("Guesses Remaining: " + guessC);
}
if(guess.equals("stats")){
printGameStats(wins,loss,numberOfGames);
}
else{
//If the user enters 'N' then they will be told the following and the scanner will be closed.
System.out.println("THANK YOU FOR PLAYING HAVE A GOOD DAY!");
user.close();
}
}
//end of the while loop which will only stop if quit equals true.
}while(quit != true );
}
private static void printGameStats(int wins,int loss,int numberOfGames) {
// Line
System.out.print("+");
printDashes(37);
System.out.println("+");
// Print titles
System.out.printf("| %6s | %6s | %12s |\n",
"WINS", "LOSSES", "GAMES PLAYED");
// Line
System.out.print("|");
printDashes(10);
System.out.print("+");
printDashes(10);
System.out.print("+");
printDashes(10);
System.out.print("+");
printDashes(16);
System.out.print("+");
printDashes(18);
System.out.println("|");
// Print values
System.out.printf("| %6d | %6d | %12d |\n",
wins, loss, numberOfGames);
// Line
System.out.print("+");
printDashes(37);
System.out.println("+");
}
private static void printDashes(int numberOfDashes) {
for (int i = 0; i < numberOfDashes; i++) {
System.out.print("-");
}
}
}

Categories