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 1 year ago.
Improve this question
I want to print out a sequence of numbers using this formula
Enter a number
if number is even divide number by 2.
But if number is odd multiply number by 3 and add 1
continue doing this until number becomes 1
sample input=3
Sample output=10 5 16 8 4 2
this is what I tried but still not getting it
package victor;
import java.util.Scanner;
public class proj {
public static void main(String[] args) {
Scanner put=new Scanner(System.in);
int temp=0;
boolean notOne=true;
System.out.println("input::: ");
int num=put.nextInt();
while(temp!=1){
if (num%2==0){
temp=num;
System.out.println(temp/2);
break ;
}
else {
temp=num;
System.out.println(temp*3+1);
break;
}
}
if(temp!=1){
notOne=false;
}
}
}
It's not working because you keep re-assigining the variable temp to the initially scanned num.
You keep checking if the initially scanned num is odd or even, when you should check if temp is odd or even.
You also break out of the loop for no reason.
And finally, you're not saving the result of the operations, you're only printing out the result.
Try to understand the points I mentioned above by noticing the differences between your code and the following:
while(temp!=1){
if (temp%2==0){
temp = temp/2;
}
else {
temp = temp*3+1;
}
System.out.println(temp);
}
You are not updating the value of temp. You are just printing it. Take the following statement
if (num%2==0){
temp=num;
System.out.println(temp/2);
break ;
}
Here you are setting temp to num and just printing temp/2 and never setting a value.
I wrote my version of it which is a bit more simpler. I hope this will help you. You can create a string to get a better output of course.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number:");
int number = scan.nextInt();
while (number != 1) {
number = number % 2 == 0 ? number / 2 : ((number * 3) + 1);
System.out.println("Number became " + number);
}
}
}
Try this:
public class Main
{
public static void main(String[] args) throws Exception
{
System.out.println("Starting...");
//Lets start the program, first we need
//the Scanner class to access to the input
Scanner stdin = new Scanner(System.in);
System.out.print("Type a num: ");
//I dont use: nextInt() because when asking for another input, will scan only
//the rest of the line (Maybe just \n - line break )
int num = Integer.parseInt(stdin.nextLine());
//Optional
int loops = 0;
while(num!=1){
//Pair, so num/2
if ( num %2 == 0){
num/=2;
}
else{
//num*3 +1
num=num*3 +1;
//Note that:
//1 + num*3
//Doesnt alter the result
}
System.out.println("num: "+num);
loops++;
}
System.out.println("total loops: "+loops);
}
}
Related
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 2 months ago.
Improve this question
The code I am trying to execute records guesses from numbers 1 to 100 using .randomNextInt(100) + 1. It is meant to do so only until the chosen number has been generated. Then, a message with the number of tries it took to generate is created.
This is my current code:
import java.util.*;
import java.util.Random;
public class FeelingLucky {
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random(1);
final int theNumber = random.nextInt(100) + 1;
int Tries = 1;
System.out.print("Pick a number between 1 and 100: ");
int theGuess = scanner.nextInt();
while (theGuess != theNumber) {
theGuess = random.nextInt(100) + 1;
System.out.println(theGuess);
Tries++;
if (theGuess == theNumber)
break;
}
System.out.println("It took " + Tries + " tries to match");
}
}
I tried using the if and break statment after Tries++ to see if that would make it stop at the chosen number, however it did not seem to do anything. Help would be appreciated, thank you.
Update: I was able to get it. I had the "guess" and the chosen "number" switched around. I thought you were supposed to create the chosen number yourself but you were supposed to read it in from the output given in the assignment.
import java.util.*;
import java.util.Random;
public class FeelingLucky {
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random(1);
int theGuess = 0;
System.out.print("Pick a number between 1 and 100: ");
final int theNumber = scanner.nextInt();
int Tries = 0;
while (theGuess != theNumber) {
theGuess= random.nextInt(100) + 1;
System.out.println(theGuess);
Tries++;
}
System.out.println("It took " + Tries + " tries to match");
}
}
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 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 is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
How can I access a variable from inside a do-while loop in Java?
The code below writes out a value until the value entered is not is between 0 and 10.
Here is my code :
import java.util.Scanner;
public class DoWhileRange {
public static void main(String[] args) {
do{
System.out.println("Enter a number between 0 an 10");
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int total +=0;
}while (a>0 && a<10);
System.out.println("Loop Terminated");
System.out.println("The total is : "+total);
}
}
The loop continues to ask for input so long as the input is between 0 and 10. Once some other number is entered the loop terminates and displays the total of all inputted numbers.
try like (declare the variable a outside the loop):
int a = -1;
do{
System.out.println("Enter a number between 0 an 10");
Scanner in = new Scanner(System.in);
a = in.nextInt();
}while (a>0 && a<10);
To access a variable beyond the loop, you need to declare/initialize it outside of the loop and then change it inside the loop. If the variable in question wasn't an int, I would suggest that you initialize it to null. However, since you can't initialize an int variable to null, you'll have to initialize it to some random value:
import java.util.Scanner;
public class DoWhileRange {
public static void main(String[] args) {
int a = 0; //create it here
do {
System.out.println("Enter a number between 0 an 10");
Scanner in = new Scanner(System.in);
a = in.nextInt();
} while (a>0 && a<10);
System.out.println("Loop Terminated");
// do something with a
}
}
NOTE: If you simply declare the variable before the loop without initializing it (as per #Evginy's answer), you'll be able to access it outside the loop but your compiler will complain that it might not have been initialized.
try this
Scanner in = new Scanner(System.in);
int a;
do {
System.out.println("Enter a number between 0 an 10");
a = in.nextInt();
} while (a > 0 && a < 10);
System.out.println("Loop Terminated");