Trouble reading next int - java

(original question, already answered)
I want a program to read integers from a text file. The data file looks like this:
5 4
3 5
4 5
3 2
The first number of each row is the par, and the second number is the score. Because 5 - 4 = 1, the score is one under par (which is a birdie). My code for the first line:
in = new Scanner (dataFile);
System.out.println("Golf Scores: ");
String line1 = in.nextLine();
System.out.println("Score 1: " + line1);
int par1 = in.nextInt();
System.out.println("Par is: " + par1);
When I run it, I get this:
Golf Scores:
Score 1: 5 4
Par is: 3
So the par and score shows up correctly. However, the displayed par shows the par of the next line from the text file. I want it to show "5" again. I tried putting the in.nextInt before the in.nextLine, but when I tried that I got this
Golf Scores:
Score 1: 4
Par is: 5
Also please let me know if I need to add anything to explain my question better.

You can't "rewind" the scanner, once you've read the line, it's gone and you can't read from it again. You can try something like this:
int par = in.nextInt();
int score = in.nextInt();
System.out.println("Score: " + par + " " + score);
System.out.println("Par is:" + par);
Here, we're reading and storing the two integers separately to begin with, and displaying them just after.

You shouldn't care if it's an int (although it's always an int - in your case) so you don't have to bother using nextInt():
String line = in.nextLine();
String[] nums = line.split(" ");
System.out.println("score: " + nums[0]/*par*/ + " " + nums[1]/*score*/);
System.out.println("par is:" + nums[0]);

You could read the line the split it like so
String line1 = in.nextLine();
String[] parScore = line.split(" ");
System.out.println("Score 1: " + parScore[1]);
System.out.println("Par is: " + parScore[0]);

Related

Scanner bug in java [closed]

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 months ago.
Improve this question
I'm italian (the writings in the prints are in italian). After do the addition, the program ask me an input, and from this input (and another that it ask after) it made an subtraction. I don't know if this is a bug. Can somone help me?
import java.util.Scanner;
public class calcolatrice {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numero1;
int numero2;
int numero3;
System.out.println("Menu: "
+ "addition (1), "
+ "subtraction (2), "
+ "multiplication (3), "
+ "division (4), "
+ "exponential (5), "
+ "square root (6)");
System.out.println("\nEnter the number corresponding to the option you want: ");
int opzione = input.nextInt();
if (opzione == 1) {
System.out.print("Enter the first number: ");
numero1 = input.nextInt();
System.out.print("Enter the second number: ");
numero2 = input.nextInt();
numero3 = numero1 + numero2;
System.out.print("The sum between " + numero1 + " and " + numero2 + " is: " + numero3);
} else if (opzione == 2)
System.out.print("\nEnter the first number: ");
numero1 = input.nextInt();
System.out.print("Enter the second number: ");
numero2 = input.nextInt();
numero3 = numero1 - numero2;
System.out.print("The difference between " + numero1 + " and " + numero2 + " is: " + numero3);
}
}
In your original code, you have this logic:
if (opzione == 1) {
// do things
} else if (opzione == 2)
// do other things
That code has a subtle bug present: in the second branch of the if statement, there are no braces; that is, there is not {...}.
Here is the entire block, where I applied code formatting (indendation) as well as line numbers:
1 if (opzione == 1) {
2 System.out.print("Enter the first number: ");
3 numero1 = input.nextInt();
4
5 System.out.print("Enter the second number: ");
6 numero2 = input.nextInt();
7
8 numero3 = numero1 + numero2;
9 System.out.print("The sum between " + numero1 + " and " + numero2 + " is: " + numero3);
10
11 } else if (opzione == 2)
12 System.out.print("\nEnter the first number: ");
13
14 numero1 = input.nextInt();
15
16 System.out.print("Enter the second number: ");
17 numero2 = input.nextInt();
18
19 numero3 = numero1 - numero2;
20 System.out.print("The difference between " + numero1 + " and " + numero2 + " is: " + numero3);
A few comments:
Line 12: This is indented once, which corresponds to the if statement – that is, if opzione has a value of 2, it will then proceed to run line 12.
Line 14: This is not indented. Note that the code formatter did this automatically (I'm using IntelliJ, though there are many other options). The formatter understood that line 14 is not part of the if statement from line 11.
Lines 16-20: Just like with line 14, these are lines of that code that run independently of the if statements on line 1 or line 11. This is why you observed that it prompts you for additional things after choosing the "addition" path.
To fix your code:
Line 11: Add an open brace ({) at the end of the line, changing this:
} else if (opzione == 2)
to this:
} else if (opzione == 2) {
Line 21: Add a new line at the end (after the call to System.out.print), with a single closing brace (}) – this is the other end of { from Line 11

How to add clear option to my command line calculator [duplicate]

This question already has answers here:
How to clear the console?
(14 answers)
Closed last year.
I am making a CLI calculator and I am trying to add a clear button but cannot figure out how to clear all the user input and start the display from the beginning. I tried using the reset method and that didn't seem to do the trick.
System.out.println("Enter any of the following:");
System.out.println(" 1 2 3 4 5 6 7 8 9 ");
System.out.println(" + - * / = ");
System.out.println("Enter AC to reset ");
double firstNum = input.nextDouble();
input.nextLine();
if (input.equals(clear)) {
input.reset();
}
System.out.println("Display 1: " + firstNum);
System.out.println("Display 2: " + firstNum);
System.out.println("Operator: ");
String operand = input.nextLine();
System.out.println("Display 1: " + firstNum + " " + operand);
System.out.println("Display 2: " + firstNum );
if (operand.equals("=")) {
break;
}
System.out.println("Enter your next number: ");
double secondNum = input.nextDouble();
input.nextLine();
calculate(firstNum, operand, secondNum);
System.out.println("Display 1: " + firstNum + " " + operand + " " + secondNum );
firstNum = answer;
System.out.println("Display 2: " + answer);
}
System.out.println("Answer: " + answer);
}
I suppose it can't be done. I tried to solve the problem and this is a waste of time. If it helps, you can use special characters like "\b" to delete the previous character or "\r" to write from the beginning of the string. But when you press Enter, you can't change the previous line.

Why my indexOf value is not returning the right result?

I am writing this little section for a program I'm gonna write for initials of a name in java, and I need to determine the position of each space in it to be able to choose the initials. I'm testing it to make sure the spaces are been seen in the right position in the line, but for some reason, the position always comes wrong! Please help me.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("please enter full name:");
String name = in.nextLine();
int space = name.indexOf(" ");
int space1 = name.indexOf(" ", space) + space+1;
int space2 = name.indexOf(" ", space1) + space1+1;
int space3 = name.indexOf(" ", space2) + space2+1;
int space4 = name.indexOf(" ", space3) + space3+1;
int space5 = name.indexOf(" ", space4) + space4+1;
System.out.println(space + " " + space1 + " " + space2 + " " + space3 + " " + space4);
}
}
My idea using this line was to count up to each part of the line space that shows up after the last one and add 1 because java starts counting at 0.
(" ", space1) + space1+1;
Basically, if the name is "Jeff Luiz Jeff Luiz" the first space is at 4 and the next one is at 9, so it would the 4, then proceed to count after this space, starting at 0, which would find 4 again(because Luiz has the same amount of letters), sum up with the last space number to keep track of the real position(then it would be 8), and finally sum up with 1 because of how java works, and so on. When I ran these 4 words I found the result 4 9 19 19 19. Does anyone know what is the problem with my code?
Replace
int space1 = name.indexOf(" ", space) + space+1;
with
int space1 = name.indexOf(" ", space + 1);
because String#indexOf(String str, int fromIndex) returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
Demo:
public class Main {
public static void main(String[] args) {
String name = "Arvind Kumar Avinash";
int space = name.indexOf(" ");
int space1 = name.indexOf(" ", space + 1);
System.out.println(space + ", " + space1);
}
}
Output:
6, 12

Print the formula used to describe the addition of two numbers

I am stuck in the U of Helsinki Java MOOC:
Create a program that can be used to add two integers together. In the beginning, the user is asked to give two integers that are to be summed. The program then prints the formula that describes the addition of the numbers.
Example output:
Give the first number:
5
Give the second number:
4
5 + 4 = 9
I am trying to get the system to print " "first" + "second" is "result". For some reason I am stumped on this otherwise easy question. My code is always throwing an error. What am I doing wrong in the last line?
import java.util.Scanner;
public class AdditionFormula {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// write your program here
System.out.println("Give the first number: ");
int first = Integer.valueOf(scanner.nextLine());
System.out.println("Give the second number: ");
int second = Integer.valueOf(scanner.nextLine());
//System.out.println("first" " + " Integer.valueOf(first) + Integer.valueOf(second));
System.out.println(first + " + " + second " = " + (first + second));
}
The code you provided does not compile
Change to
System.out.println(first + " + " + second + " = " + (first + second));

Can not figure out how get certain inputs to work?

I am making a post fix calculator and i can not figure out how to do functions without having an equal sign. For example " a = 3 5 + " will print 8 , but " 3 5 + " will make the program crash. Here is what i have so far
if (values.peek().matches("[a-z]") || values.search("=") > -1 )
{
String a = values.pop();
values.pop();
double answer = compute(values);
memory.put(a, answer);
var.add(a);
System.out.println(" " + answer);
}
else
{
double answer = compute(values);
System.out.println(answer);
}
I guess your parsing of input has some problem. If you want to split the input by space, try this way:
String str = " 3 5 + ";
String[] splited = str.split("\\s+");
Inspired by the first answer of this question:

Categories