Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 3 years ago.
Improve this question
I was going through a Palindrome( Specifically String Palindrome) Problem and was checking whether the string is palindrome or not. But a problem struck in the program
public static void main(String args[])
{
Scanner sc= new Scanner(System.in);
int n,flag=0;
n=sc.nextInt();
char a[]=new char[n];
int l=0;
int h=n-1;
while(l<h)
{
if(a[l++]!=a[h--])
{
flag=1;
}
}
if(flag==1)
{
System.out.println("String is not Palindrome");
}
else{
System.out.println("String is Palindrome");
}
}
So above is the code which I wrote but the problem is, I have created a character array instead of the string.
The main point of the argument is the above code correct in terms of code standards.
is the above code correct in terms of code standards
Not really:
Don't name a local variable l (lowercase L). It is too easy to confuse with 1 (one).
Since I don't know what h is supposed to be a shorthand for, I changed l and h to i and j below, as those are very common integer iterator variable names.
Don't declare a local variable before it's needed. Use int n = sc.nextInt();
Don't put array declaration on the variable name. Put it on the type, since it defines the type.
Don't use 0 / 1 for false / true values. Change flag to a boolean, and name it better, e.g. describe its value. notPalindrome seems appropriate here. It helps document the code.
The while loop should be a for loop. It helps keeping loop logic together, and isolated from other logic, and it helps limit the scope of the loop variable(s).
Those were my comments related to coding standards.
However, your code doesn't work, because you never get a string from the user. Your choice of using char[] is fine, but you need to change the logic for getting it. See code below for how to use toCharArray() to do that.
Also, once a difference is found, you should exit the loop, either by also checking the boolean variable in the loop condition, or by using break. Personally, I prefer break.
Scanner sc = new Scanner(System.in);
String sentence = sc.nextLine();
char[] a = sentence.toCharArray();
boolean notPalindrome = false;
for (int i = 0, j = a.length - 1; i < j; i++, j--) {
if (a[i] != a[j]) {
notPalindrome = true;
break;
}
}
if (notPalindrome) {
System.out.println("String is not Palindrome");
} else {
System.out.println("String is Palindrome");
}
please use below code to check given String/number Palindrome or Not
public static void main(String args[]) {
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter String ");
original = in.nextLine();
int n = original.length();
for ( int index = n - 1; index >= 0; index-- ) {
reverse = reverse + original.charAt(index);
}
if (original.equals(reverse)) {
System.out.println("String is Palindrome");
} else {
System.out.println("String is not Palindrome");
}
}
Related
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 10 months ago.
Improve this question
EDIT: instead of any loops, i know this kind of statement needs a while loop but I was required to use only the If-else statement.
Im trying to find the largest digit in an inputted number and all examples i can see are using while and im a bit troubled in coding it using if else. this is my sample JAVA code:
Scanner cs1 = new Scanner (System.in);
System.out.println ("Input three digit number : ");
int num = cs1.nextInt ();
int reminder, Largest_number= 0;
while (num > 0)
{
reminder = num % 10;
if (Largest_number< reminder)
{
Largest_number= reminder;
}
num = num / 10;
}
System.out.println("\nOutput : "+Largest_number);
cs1.close();
}
}
You can loop through that number without loop.
public static void main(String[] args) {
Scanner cs1 = new Scanner(System.in);
System.out.println("Input three digit number : ");
int num = cs1.nextInt();
int largestNumber = 0;
System.out.println("\nOutput : " + getLargestNumber(Math.abs(num), largestNumber));
cs1.close();
}
static int getLargestNumber(int num, int largestNumber){
if (num>0){
int reminder = num % 10;
if (largestNumber < reminder) {
largestNumber= reminder;
}
num = num/10;
largestNumber = getLargestNumber(num, largestNumber);
}
return largestNumber;
}
What I am doing here is basically I am mimicing standard for or while loops with a thing called recursion.
From GeeksforGeeks:
What is Recursion? The process in which a function calls itself
directly or indirectly is called recursion and the corresponding
function is called as recursive function.
So I'm recursively calling static method getLargestNumber(int num, int largest_number) until I reach the moment when I do not enter if (num>0) statement.
And since calling of getLargestNumber is happening inside of that if statement, then the recursion stops, and I get the final result back.
UPDATE
You algorithm is wrong. You need to pass Absolute value of entered integer. Otherwise you algorithm will give wrong answer if you pass negative value as input.
Changed num to Math.abs(num).
This is a solution without any kind of loop but only if there is guaranteed to have as input 3-digit numbers.
import java.util.Scanner;
public class App {
public static void main(String[] args) throws Exception {
Scanner cs1 = new Scanner (System.in);
System.out.print("Input three digit number: ");
String threeDigitNum = cs1.next();
int largestNum, tmpNum;
// assuming 1st digit is the largest
largestNum = threeDigitNum.charAt(0) - '0';
// checking if 2nd digit is greater than 1st
tmpNum = threeDigitNum.charAt(1) - '0';
if( tmpNum > largestNum )
largestNum = tmpNum;
// checking if 3nd digit is greater than 1st or 2nd
tmpNum = threeDigitNum.charAt(2) - '0';
if( tmpNum > largestNum )
largestNum = tmpNum;
System.out.println("\nOutput : "+largestNum);
cs1.close();
}
}
Note:
Any char is reprsented as an integer value, and that is what charAt() method returns. So from it subtracting the chrachter '0' (represented by it's integer value) it gives as a result the integer equivalent of that value. In case of digits, for example '8' - '0' will result in integer value 8.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
Hi this code currently checks if it is a palindrome if there all the letters are same capitalization and if there is no spaces. I am trying to make it so it ignores non-alpha and white spaces.
import java.util.*;
public class PalindromeTester
{
public static void main(String args[])
{
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter a string to check if it is a palindrome");
original = in.nextLine();
int length = original.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + original.charAt(i);
if (original.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
}
}
After you set your variable "original" to the next line of text, you can call the replaceAll() string method to strip away any unwanted characters with a specifier parameter. Also, you can call toLowerCase() to get all lower case strings.
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter a string to check if it is a palindrome");
original = in.nextLine();
original = original.replaceAll("[^a-zA-Z]","").toLowerCase();
replaceAll() uses a regular expression to search for the specified text and replaces it with the second parameter value.
Here's a quick example for the palindrome "racecar":
String original = "rA89293cEC#Ar";
original = original.replaceAll("[^a-zA-Z]","").toLowerCase();
System.out.println(original);
Can also be done without replacing Chars (and copying the String):
public boolean isPalindrome(String s) {
int start = 0;
int end = s.length()-1;
while(!s.isEmpty() && Character.isSpaceChar(start))
{
start++;
}
if ( s.isEmpty())
return true;
while (start < end )
{
while( ( start < end) && !Character.isLetterOrDigit(s.charAt(start)))
{
start++;
}
while( ( start < end) && !Character.isLetterOrDigit(s.charAt(end)))
{
end--;
}
if ( start >= end )
return true;
if ( Character.toUpperCase(s.charAt(start)) != Character.toUpperCase(s.charAt(end)))
return false;
start++;end--;
}
return true;
}
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
public class decisionMaker {
public static void main(String args[]) {
String option[] = new String[10];
// Output
for (int i = 0; i <= 9; i++) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the next option:");
option[i] = input.next();
System.out.println(" ");
}
for (int i = 0; i <= 9; i++) {
System.out.println("option: ");
System.out.println("option[i]+" ");
}
// Output
}
I'm trying to figure out how to add a count to the options, exit and end the program after entering a certain letter or number, and how to create a random output from the user input. I want it to give me one option that I had input at random. Can anyone help me with one or a few of these things. I'm trying to learn to code on my own, and I'm stuck on these.
Randomness
You can generate random numbers using java.util.Random;:
import java.util.Random;
public class SomeClass{
static Random rand = new Random();
public static void main(String args[]){
System.out.println(rand.nextInt());
}
}
About some broken code:
If you want to print out the value of a variable with System.out.println() then you need only type the variable without any quotation marks. The code you've written below will not compile:
System.out.println("option: ");
System.out.println("option[i]+" ");
Assuming that's what you want to do, it should instead be written as:
System.out.println("option: ");
System.out.println(option[i]);
Or even System.out.println("option: \n"+option[i]);
(The escape sequence \n when placed inside of quotation marks just indicates to the console to add a new line.)
Scanner:
Additionally, as nick zoum pointed out, your Scanner object should be initialized outside of the for loop, such as right underneath of the main() method.
Please comment below if you need clarification or if I misunderstood what you were looking for. It was very hard to understand your question.
You could try something like this:
public class DecisionMaker {
public static void main(String[] args) {
// output
Scanner scanner = new Scanner(System.in);
int size = getInt(scanner);
String option[] = new String[size];
for (int index = 0; index < size; index++) {
System.out.print("Enter the next option:");
option[index] = scanner.next();
}
int index = (int) (Math.random() * size);
System.out.println(option[index]);
scanner.close();
// output
}
public static int getInt(Scanner scanner) {
int size = 0;
while (size <= 0) {
if (scanner.hasNext()) {
if (scanner.hasNextInt()) {
size = scanner.nextInt();
}
}
if (size <= 0) {
System.out.println("The input: " + scanner.next() + " is not a valid value.");
}
}
return size;
}
}
How the program works:
The Scanner is initialized in the beginning and there is only
one instance of it.
Then the program will wait until the user inserts a valid number for
the size of options.
The next 5 lines were essentially copied from your code.
Finally we get a random Integer in the range of 0 - (size - 1) and print
the String of the array with that index.
Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 7 years ago.
Improve this question
I have this code bellow which is supposed to take a user input and store it in an array, and I was just wondering why it is not allowing me to input any numbers.
Should the input part be inside the if statement? Also what is the best way to make it work properly?
import java.util.*;
public class fun_with_loops {
static Scanner scan = new Scanner(System.in);
public static void main (String[] args) throws java.io.IOException
{
int[] numbers = new int[10];
int numberSize = 0;
System.out.print("Enter a few numbers please\n");
while (numbers.length < 10)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[numberSize] = input;
numberSize++;
}
else
{
break;
}
}
}
}
Problem
The following expression on loop's control is always evaluated as false:
while (numbers.length < 10)
since array's length is in fact equals 10 as when declared.
Solution
In order to program work as expected you have to use numberSize variable as control:
while (numberSize < 10)
since it grows based on number of inputs.
As Am_I_Helpful stated, you are using a while loop on a value that will not change. I am not sure if the use while is needed in this case. Since you want to loop a specific amount of times you might want to use a for loop. If the amount of times will depend on the size of your array, you could still replace the "10" by your array length (numbers.length).
for (int i; i< 10; i++)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[numberSize] = input;
numberSize++;
}
else
{
break;
}
}
Hoping it helped!
Dan
a short and sweet summary of when to use each loop:
http://mathbits.com/MathBits/CompSci/looping/whichloop.htm
but of course it always depends of your goal while coding so it's sometimes hard to say which is best if you are not the one coding.
Because the array is initialized to size 10, the length will always be 10. A counter variable needs to be used. Here is the code:
static Scanner scan = new Scanner(System.in);
public static void main (String[] args) throws java.io.IOException
{
int[] numbers = new int[10];
System.out.print("Enter a few numbers please\n");
int count = 0;
while (count < 10)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[count] = input;
count++;
}
else
{
break;
}
}
The length property returns the size of the array, not the number of elements that are present in the array. You need to keep track of number of elements in the array on your own.
for(int eleCount = 0; eleCount < 10; eleCount++)
{
int input = scan.nextInt();
if (input != 0)
{
numbers[eleCount] = input;
}
else
{
break;
}
}
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I've been writing a program that is supposed to count the occurrence of a letter in a String array. In order to do so I've made every input lower case, so that when the search for the specified letter is being done it is all done in lower case. The program works when the letter being searched for is inputted in lower case, but wont work when in upper case. I'm confused about this because I've used the toLowerCase() method to make the inputted letter lower case despite what is inputted. Any help would be greatly appreciated.
import java.util.Scanner;
public class RunStringArray
{
public static void main (String [] args){
int arrayLength;
int count = 0;
String word;
String letter;
int letterCount = 0;
int x = 0;
//Asks user for length of array
Scanner kbInput = new Scanner(System.in);
System.out.println("Enter a positive integer");
arrayLength = kbInput.nextInt();
//Makes sure array length is a valid number
while (arrayLength <= 0){
System.out.println("Invalid input (not positive)");
System.out.println("Enter a positive integer");
arrayLength = kbInput.nextInt();
}
//Creates array of the user specified length
String words [] = new String [arrayLength];
//Asks user to input all strings in the array and makes them lower case.
kbInput.nextLine();
while (count < words.length){
System.out.println("Enter a string");
word = kbInput.nextLine();
word = word.toLowerCase();
words[count] = word;
count++;
}
//Asks user what letter he/she wants to count in the array
System.out.println("What letter do you want to count?");
letter = kbInput.nextLine();
letter.toLowerCase();
//Error trap making sure the user inputs a letter.
while (letter.length() > 1){
System.out.println("Invalid input (not a letter)");
System.out.println("What latter do you want to count?");
letter=kbInput.nextLine();
letter.toLowerCase();
}
char c = letter.charAt(0);
//While loop which will count the occurrence of the letter in each
//string in the array, and then adds all of the occurrences together
//in order to find the total occurrences of the letter.
while (count > 0){
letterCount = RunStringArray.count(words[count-1], c);
x += letterCount;
count--;
}
System.out.println(x);
} //End of main
private static int count (String str, char searchLetter){
int occurrences = 0;
for (int k = 0; k < str.length(); k++){
if (str.charAt(k) == searchLetter)
{
occurrences++;
} //End of if
} //End of for loop
return occurrences;
} //End of method
} //End of class
You are not storing the output of letter.toLowerCase().
Change
letter.toLowerCase();
to
letter = letter.toLowerCase();
Methods that are executed on Strings, Integers, Long etc will produce new objects. Thats why you need to assign those values. The reason: Strings and all those types are immutable, you cannot change its value, when you do java creates new object.
letter = kbInput.nextLine().toLowerCase();