This java program produce unwanted results - java

I wrote a program that read input and then print it out.
public class inverse {
public static void main (String arg[]) throws IOException {
int input1 = System.in.read();
System.out.println(input1);
String temp= Integer.toString(input1);
System.out.println(temp);
int[] numtoarray =new int[temp.length()];
System.out.println(temp.length());
for (int i=0 ;i<temp.length(); i++)
{numtoarray[i]= temp.charAt(i);
System.out.println(numtoarray[i]+"*");
}
}}
but here when I write 123456 it print 49. but it should print 123456. what cause this problem?

123456 is an integer, but System.in.read() reads the next byte as input so it will not read the integer as expected. Use the Scanner#nextInt() method to read an integer:
Scanner input = new Scanner(System.in);
int input1 = input.nextInt();
Your numtoarray array will also print the bytes, not the individual characters of the integer parsed as a string. To print the characters, change the type to a char[]:
char[] numtoarray = new char[temp.length()];
System.out.println(temp.length());
for (int i = 0; i < temp.length(); i++) {
numtoarray[i] = temp.charAt(i);
System.out.println(numtoarray[i] + "*");
}

read() doesn't read a number, it reads one byte and returns its value as an int. If you enter a digit, you get back 48 + that digit because the digits 0 through 9 have the values 48 through 57 in the ASCII encoding.
You can use Scanner instead
Here is the code
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
int input1 = in.nextInt();
System.out.println(input1);
String temp= Integer.toString(input1);
System.out.println(temp);
char[] numtoarray =new char[temp.length()];
System.out.println(temp.length());
for (int i=0 ;i<temp.length(); i++){
numtoarray[i]= temp.charAt(i);
System.out.println(numtoarray[i]+"*");
}
}
DEMO

Related

user input to a Char Array

I am trying to create a program that takes a user's answer for a test and puts it in a char array, and then compares it to an array with the answers.
I have a problem with input the user's Answers into the char array. I keep getting an EE saying that in.nextLine(); - there is no line found and it throws a no such element exception.
import java.util.Scanner;
public class driverExam {
public static void main(String[] args) {
System.out.println("Driver's Test. Input your answers for the following
10 Q's. ");
System.out.println();
char[] testAnswers = {'B','D','A','A','C','A','B','A','C','D'};
int uA =9;
String userInput;
for (int i =0; i<uA;i++) {
Scanner in = new Scanner(System.in);
System.out.print("Question #"+(i+1)+": ");
userInput = in.nextLine();
in.close();
int len = userInput.length();
char[] userAnswers = new char [len];
for(int x =0;x<len;x++) {
userAnswers[i] = userInput.toUpperCase().charAt(i);
}
System.out.println(userAnswers);
}
System.out.println("Your answers have been recorded.");
System.out.println();
}
}
Shouldn't userAnswers array be of size 10?
Your program has quite redundant and unnecessary steps, according to me. So I have modified it to meet your need.
There is no need to put the "Scanner in...." inside the loop.
This loop is full of mistakes. Not discouraging, just saying.
for (int i =0; i<uA;i++)
{
Scanner in = new Scanner(System.in);//scanner inside loop
System.out.print("Question #"+(i+1)+": ");
userInput = in.nextLine();
in.close();//already mentioned by someone in the comment
int len = userInput.length();
char[] userAnswers = new char [len];//no need to declare array inside loop
for(int x =0;x<len;x++)
{
userAnswers[i] = userInput.toUpperCase().charAt(i);
}
}
System.out.println(userAnswers);//this will not print the array,it will print
//something like [I#8428 ,[ denotes 1D array,I integer,and the rest of it has
//some meaning too
Now here is the code which will get the work done
char[] testAnswers = {'B','D','A','A','C','A','B','A','C','D'};
int uA =testAnswers.length;//to find the length of testAnswers array i.e. 10
char[] userAnswers = new char [uA];
char userInput;
int i;
Scanner in = new Scanner(System.in);
for (i =0; i<uA;i++)
{
System.out.print("Question #"+(i+1)+": ");
userInput = Character.toUpperCase(in.next().charAt(0));
}
for(i=0;i<ua;i++)
{
System.out.println(userAnswers[i]);
}
System.out.println("Data has been recorded");
I am not demeaning, just trying to help.

Trying to calculate a sum from input, when text is thrown in as well

Have input passed through Scanner. It has both numbers and letters and spaces.
Letters being stripped out, leaving only spaces and numbers.
If I input without spaces, it works fine, but if I add spaces, it throws the error:
java.lang.NumberFormatException: For input string: "" (in
java.lang.NumberFormatException)
This is applied against the line
int dataInt = Integer.parseInt(data[i]);
Stderr outputs
java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592) at
java.lang.Integer.parseInt(Integer.java:615) at
Program2.main(Program2.java:21)
Code is below
import java.util.*;
import java.io.*;
public class Program2 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String input = kb.nextLine();
input = input.replaceAll("[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]","");
System.out.println(input);
while(!input.equals("#")){
String[] data = input.split(" ");
int sum = 0;
if (!input.equals("")){
for(int i = 0; i < data.length; i++){
int dataInt = Integer.parseInt(data[i]);
sum = sum + dataInt;
}
}
System.out.println(sum);
input = kb.nextLine();
}
} //main
} // class Program2
Turns out that this program is supposed to extract all numbers in each line, and sum them up. Each line is free to be mixed with characters and spaces. Ex: fsdjs 3 8 herlks 983 should produce 994.
There were a few things wrong
if (!input.equals(""))
for(int i = 0; i < data.length; i++){
will only check if the input is empty, but it should be the array of split up substrings that we should be worried about as that's what we should be operating on. There will be empty strings after calling split(). It should really be
for(int i = 0; i < data.length; i++){
if (!data[i].equals(""))
While running your code, there seems to be times where the program gets caught up with spaces while calling parseInt(). Not sure how it worked, but it had to do with the number of replaceAll()s.
The string input is basically a list of numbers delimited by a series of alphabets and spaces. You could just split on that with input.split("[^\\d]+) instead of calling replaceAll() multiple times.
import java.util.*;
import java.io.*;
public class Program2 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String input = kb.nextLine();
System.out.println(input);
while(!input.equals("#")) {
// VVV
String[] data = input.split("[^\\d]+");
int sum = 0;
for(int i = 0; i < data.length; i++) {
if (!data[i].equals("")) {
int dataInt = Integer.parseInt(data[i]);
sum = sum + dataInt;
}
}
System.out.println(sum);
input = kb.nextLine();
}
} //main
} // class Program2

How do input characters into an array through user input?

This is essentially what i have, everything works fine, but for some reason I'm not able to input the characters into the array.
If you could explain to me why it isn't working it would be greatly appreciated.
The purpose of this is to input a series of characters into an array, and to count the number of ' ' (gaps) present within it.
The part in bold is where I'm currently having my issue.
import java.util.*;
public class Test4c{
public static void main(String[] args){
Scanner x = new Scanner(System.in);
Scanner a = new Scanner(System.in);
int size;
System.out.println("Please input the size of the array.");
size = x.nextInt();
char[] test = new char[size];
System.out.println("Please input " + size + " characters.");
//ask user to input number of characters
for(int i = 0; i<size; i++){
**test[i] = a.next().toCharArray();**
}
int s;
int e;
System.out.println("Please input the starting value of the search.");
s = x.nextInt();
System.out.println("Please input the ending value of the search.");
e = x.nextInt();
}
public static int spaceCount(char[]arr, int s, int e){
int count = 0;
if (s<= e) {
count = spaceCount(arr,s+1, e);
/*counter set up to cause an increase of "s" so
* the array is traversed until point "e"*/
if (arr[s] == ' ' ) {
count++;
}
}
return count;// return the number of spaces found
}
}
when you force to run your code, you get such error stack
Exception in thread "main" java.lang.RuntimeException: Uncompilable
source code - incompatible types: char[] cannot be converted to char
at test4c.Test4c.main(Test4c.java:26) Java Result: 1
It is obviously clear why you get such a message?
you try to insert a char array inside an index of char[] test which accept a char not a char array
This is what you have:
for(int i = 0; i<size; i++){
test[i] = a.next().toCharArray();
}
From what you have, I think you want just to convert to a.next() to char array which is test which you have already defined
char[] test = new char[size];
you can change what you have to
test = a.next().toCharArray();
The issue is that the toCharArray returns an array, and you can't put an array into an array. Try this:
Char[] test = a.next().toCharArray();

Java text to ASCII converter with a loop

I'm trying to my first program text to ASCII converter, but I have some problems, it's explained inside the code:
import java.util.Scanner;
public class AsciiConverter {
public static void main(String[] args){
System.out.println("Write some text here");
Scanner scanner = new Scanner(System.in).useDelimiter("\\n"); // Scans whole text
String myChars = scanner.next();
int lenght = myChars.length(); // Checking length of text to use it as "while" ending value
int i = -1;
int j = 0;
do{
String convert = myChars.substring(i++,j++); // taking first char, should be (0,1)...(1,2)... etc
int ascii = ('convert'/1); // I'm trying to do this, so it will show ascii code instead of letter, error: invalid character constant
System.out.print(ascii); // Should convert all text to ascii symbols
}
while(j < lenght );
scanner.close();
}
}
String x = "text"; // your scan text
for(int i =0; i< x.getLength(); x++){
System.out.println((int)x.charAt(i)); // A = 65, B = 66...etc...
}
(Maybe use Scanner.nextLine().)
import java.text.Normalizer;
import java.text.Normalizer.Form;
String ascii = Normalizer.normalize(myChars, Form.NFKD)
.replaceAll("\\P{ASCII}", "");
This splits all accented chars like ĉ into c and a zero length ^. And then all non-ascii (capital P = non-P) is removed.
Try this:
public static void main(String[] args){
System.out.println("Write some text here");
Scanner scanner = new Scanner(System.in).useDelimiter("\\n"); // Scans whole text
String myChars = scanner.next();
char[] charArray = myChars.toCharArray();
for (char character : charArray) {
System.out.println((int)character);
}
scanner.close();
}
This converts the string to a char array and then prints out the string representation of each character.
Replace this line
"int ascii = ('convert'/1);"
by
int ascii= (int)convert;
This should work.
This code will work
import java.util.Scanner;
public class AsciiConverter {
public static void main(String[] args){
System.out.println("Write some text here");
Scanner scanner = new Scanner(System.in).useDelimiter("\\n"); // Scans whole text
String myChars = scanner.next();
int lenght = myChars.length(); // Checking length of text to use it as "while" ending value
int i = -1;
int j = 0;
do{
String convert = myChars.substring(i++,j++); // taking first char, should be (0,1)...(1,2)... etc
int ascii= (int)convert; // I'm trying to do this, so it will show ascii code instead of letter, error: invalid character constant
System.out.print(ascii); // Should convert all text to ascii symbols
}
while(j < lenght );
scanner.close();
}
}
did you missed type casting the character to integer?
try this:
int ascii = (int) convert;

How to read multiple Integer values from a single line of input in Java?

I am working on a program and I want to allow a user to enter multiple integers when prompted. I have tried to use a scanner but I found that it only stores the first integer entered by the user. For example:
Enter multiple integers: 1 3 5
The scanner will only get the first integer 1. Is it possible to get all 3 different integers from one line and be able to use them later? These integers are the positions of data in a linked list I need to manipulate based on the users input. I cannot post my source code, but I wanted to know if this is possible.
I use it all the time on hackerrank/leetcode
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String lines = br.readLine();
String[] strs = lines.trim().split("\\s+");
for (int i = 0; i < strs.length; i++) {
a[i] = Integer.parseInt(strs[i]);
}
Try this
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
if (in.hasNextInt())
System.out.println(in.nextInt());
else
in.next();
}
}
By default, Scanner uses the delimiter pattern "\p{javaWhitespace}+" which matches at least one white space as delimiter. you don't have to do anything special.
If you want to match either whitespace(1 or more) or a comma, replace the Scanner invocation with this
Scanner in = new Scanner(System.in).useDelimiter("[,\\s+]");
You want to take the numbers in as a String and then use String.split(" ") to get the 3 numbers.
String input = scanner.nextLine(); // get the entire line after the prompt
String[] numbers = input.split(" "); // split by spaces
Each index of the array will hold a String representation of the numbers which can be made to be ints by Integer.parseInt()
Scanner has a method called hasNext():
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
System.out.println(scanner.nextInt());
}
If you know how much integers you will get, then you can use nextInt() method
For example
Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i < 3; i++)
{
integers[i] = sc.nextInt();
}
Java 8
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int arr[] = Arrays.stream(in.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Here is how you would use the Scanner to process as many integers as the user would like to input and put all values into an array. However, you should only use this if you do not know how many integers the user will input. If you do know, you should simply use Scanner.nextInt() the number of times you would like to get an integer.
import java.util.Scanner; // imports class so we can use Scanner object
public class Test
{
public static void main( String[] args )
{
Scanner keyboard = new Scanner( System.in );
System.out.print("Enter numbers: ");
// This inputs the numbers and stores as one whole string value
// (e.g. if user entered 1 2 3, input = "1 2 3").
String input = keyboard.nextLine();
// This splits up the string every at every space and stores these
// values in an array called numbersStr. (e.g. if the input variable is
// "1 2 3", numbersStr would be {"1", "2", "3"} )
String[] numbersStr = input.split(" ");
// This makes an int[] array the same length as our string array
// called numbers. This is how we will store each number as an integer
// instead of a string when we have the values.
int[] numbers = new int[ numbersStr.length ];
// Starts a for loop which iterates through the whole array of the
// numbers as strings.
for ( int i = 0; i < numbersStr.length; i++ )
{
// Turns every value in the numbersStr array into an integer
// and puts it into the numbers array.
numbers[i] = Integer.parseInt( numbersStr[i] );
// OPTIONAL: Prints out each value in the numbers array.
System.out.print( numbers[i] + ", " );
}
System.out.println();
}
}
There is more than one way to do that but simple one is using String.split(" ")
this is a method of String class that separate words by a spacial character(s) like " " (space)
All we need to do is save this word in an Array of Strings.
Warning : you have to use scan.nextLine(); other ways its not going to work(Do not use scan.next();
String user_input = scan.nextLine();
String[] stringsArray = user_input.split(" ");
now we need to convert these strings to Integers. create a for loop and convert every single index of stringArray :
for (int i = 0; i < stringsArray.length; i++) {
int x = Integer.parseInt(stringsArray[i]);
// Do what you want to do with these int value here
}
Best way is converting the whole stringArray to an intArray :
int[] intArray = new int[stringsArray.length];
for (int i = 0; i < stringsArray.length; i++) {
intArray[i] = Integer.parseInt(stringsArray[i]);
}
now do any proses you want like print or sum or... on intArray
The whole code will be like this :
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String user_input = scan.nextLine();
String[] stringsArray = user_input.split(" ");
int[] intArray = new int[stringsArray.length];
for (int i = 0; i < stringsArray.length; i++) {
intArray[i] = Integer.parseInt(stringsArray[i]);
}
}
}
This works fine ....
int a = nextInt();
int b = nextInt();
int c = nextInt();
Or you can read them in a loop
Using this on many coding sites:
CASE 1: WHEN NUMBER OF INTEGERS IN EACH LINE IS GIVEN
Suppose you are given 3 test cases with each line of 4 integer inputs separated by spaces 1 2 3 4, 5 6 7 8 , 1 1 2 2
int t=3,i;
int a[]=new int[4];
Scanner scanner = new Scanner(System.in);
while(t>0)
{
for(i=0; i<4; i++){
a[i]=scanner.nextInt();
System.out.println(a[i]);
}
//USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem
t--;
}
CASE 2: WHEN NUMBER OF INTEGERS in each line is NOT GIVEN
Scanner scanner = new Scanner(System.in);
String lines=scanner.nextLine();
String[] strs = lines.trim().split("\\s+");
Note that you need to trim() first: trim().split("\\s+") - otherwise, e.g. splitting a b c will emit two empty strings first
int n=strs.length; //Calculating length gives number of integers
int a[]=new int[n];
for (int i=0; i<n; i++)
{
a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer
System.out.println(a[i]);
}
created this code specially for the Hacker earth exam
Scanner values = new Scanner(System.in); //initialize scanner
int[] arr = new int[6]; //initialize array
for (int i = 0; i < arr.length; i++) {
arr[i] = (values.hasNext() == true ? values.nextInt():null);
// it will read the next input value
}
/* user enter = 1 2 3 4 5
arr[1]= 1
arr[2]= 2
and soo on
*/
It's working with this code:
Scanner input = new Scanner(System.in);
System.out.println("Enter Name : ");
String name = input.next().toString();
System.out.println("Enter Phone # : ");
String phone = input.next().toString();
A simple solution can be to consider the input as an array.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //declare number of integers you will take as input
int[] arr = new int[n]; //declare array
for(int i=0; i<arr.length; i++){
arr[i] = sc.nextInt(); //take values
}
You're probably looking for String.split(String regex). Use " " for your regex. This will give you an array of strings that you can parse individually into ints.
Better get the whole line as a string and then use StringTokenizer to get the numbers (using space as delimiter ) and then parse them as integers . This will work for n number of integers in a line .
Scanner sc = new Scanner(System.in);
List<Integer> l = new LinkedList<>(); // use linkedlist to save order of insertion
StringTokenizer st = new StringTokenizer(sc.nextLine(), " "); // whitespace is the delimiter to create tokens
while(st.hasMoreTokens()) // iterate until no more tokens
{
l.add(Integer.parseInt(st.nextToken())); // parse each token to integer and add to linkedlist
}
Using BufferedReader -
StringTokenizer st = new StringTokenizer(buf.readLine());
while(st.hasMoreTokens())
{
arr[i++] = Integer.parseInt(st.nextToken());
}
When we want to take Integer as inputs
For just 3 inputs as in your case:
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a,b,c;
a = scan.nextInt();
b = scan.nextInt();
c = scan.nextInt();
For more number of inputs we can use a loop:
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a[] = new int[n]; //where n is the number of inputs
for(int i=0;i<n;i++){
a[i] = scan.nextInt();
}
This method only requires users to enter the "return" key once after they have finished entering numbers:
It also skips special characters so that the final array will only contains integers
ArrayList<Integer> nums = new ArrayList<>();
// User input
Scanner sc = new Scanner(System.in);
String n = sc.nextLine();
if (!n.isEmpty()) {
String[] str = n.split(" ");
for (String s : str) {
try {
nums.add(Integer.valueOf(s));
} catch (NumberFormatException e) {
System.out.println(s + " cannot be converted to Integer, skipping...");
}
}
}
//Get user input as a 1 2 3 4 5 6 .... and then some of the even or odd number like as 2+4 = 6 for even number
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int evenSum = 0;
int oddSum = 0;
while (n > 0) {
int last = n % 10;
if (last % 2 == 0) {
evenSum += last;
} else {
oddSum += last;
}
n = n / 10;
}
System.out.println(evenSum + " " + oddSum);
}
}
if ur getting nzec error, try this:
try{
//your code
}
catch(Exception e){
return;
}
i know it's old discuss :) i tested below code it's worked
`String day = "";
day = sc.next();
days[i] = Integer.parseInt(day);`

Categories