How to prompt user to enter which [row][column] - java

I want the user to enter which row and which column in order to read the data in it
for example if the user enter row = 6 column = 0, it will print out Pw1
static String fullChessBoard[][] = {
{"Rb1", "Kb1", "Bb1", "Qb1", "Ab1", "Bb2", "Kb2", "Rb2"},
{"Pb1", "Pb2", "Pb3", "Pb4", "Pb5", "Pb6", "Pb7", "Pb8"},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{"Pw1", "Pw2", "Pw3", "Pw4", "Pw5", "Pw6", "Pw7", "Pw8"},
{"Rw1", "Kw1", "Bw1", "Qw1", "Aw1", "Bw2", "Kw2", "Rw2"},
};
System.out.println(Player1W + ", please make a move");
int row = scan.nextInt();
int column = scan.nextInt();

Try this code
import java.util.Scanner;
public class HelloChess{
static String fullChessBoard[][] = {
{"Rb1", "Kb1", "Bb1", "Qb1", "Ab1", "Bb2", "Kb2", "Rb2"},
{"Pb1", "Pb2", "Pb3", "Pb4", "Pb5", "Pb6", "Pb7", "Pb8"},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{" ", " ", " ", " ", " ", " ", " ", " "},
{"Pw1", "Pw2", "Pw3", "Pw4", "Pw5", "Pw6", "Pw7", "Pw8"},
{"Rw1", "Kw1", "Bw1", "Qw1", "Aw1", "Bw2", "Kw2", "Rw2"},
};
public static void main(String []args){
Scanner scan = new Scanner(System.in);
System.out.print("Enter Row: ");
int row = scan.nextInt();
System.out.print("Enter Column: ");
int column = scan.nextInt();
System.out.println("Result : "+fullChessBoard[row][column]);
scan.close();
}
}

I'm assuming this program you are writing is a command line program, where the user puts information into the command prompt and your program responds. If it's not, please let me know, as my answer operates under that assumption.
There's more than one way to get input from the command line in Java. The following link has a few great examples:
[https://www.geeksforgeeks.org/ways-to-read-input-from-console-in-java/][1]
Here's a quick example I chalked up that outputs the first repeated letter from a string the user enters, it uses the BufferedReader class set to get input from the System.in object wrapped by an InputStreamReader. I'm sure that sounds complicated, but the code explains it better:
import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;
public class FirstRecurringCharacter {
/**
* #param args the command line arguments
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter your string: ");
String toAnalyze = reader.readLine();
returnFirstRecurring(toAnalyze);
}
private static Character returnFirstRecurring(String toAnalyze) {
String toSearch = toAnalyze;
Set<Character> seenCharacters = new TreeSet<>();
for (int i = 0; i < toSearch.length(); i++) {
if (seenCharacters.contains(toSearch.charAt(i))) {
System.out.println(toSearch.charAt(i));
return toSearch.charAt(i);
} else {
seenCharacters.add(toSearch.charAt(i));
}
}
System.out.println("No repeating characters.");
return null;
}
}
The .readLine() method gets the users input after they hit enter on the console. Try it yourself!
With your program, you might want to prompt them, one at a time, to insert a row index, then a column index, you can cast their input to integers if needed, and then use them in the remainder of the program. I hope this helps!

Related

Java Printing out exceptions thrown and no exceptions throw in different places

I was not sure how to formulate the title however I have the following problem. I'm making a program which reads out things out of a CSV file and types it out. In a file where there are no problem I get my results normally. When I run my other file which has errors thrown my program still prints out the things I have in catch but not in a order I want it to- I want to put all parts with errors throw on top and the ones which have no errors on the bottom of the print. How can i do that?
This is the code I currently have
String []arrayS = line.split(",");
if(arrayS.length==7){
String fName = "";
String lName = "";
//String
int bDay;
int bMonth;
int bYear;
int weight;
double height;
try{
//System.out.printf("%15s%15s%15s%15s \n", fnlName , birthDate, sWeight, sHeight);
fName = arrayS[0];//gets first line in csv- name
lName = arrayS[1];//gets second line in csv- last name
try{
bDay = Integer.parseInt(arrayS[2].trim());//gets third line in csv- birth day
}catch (NumberFormatException nfe){
System.err.println("Error found in" + arrayS[0] + ", " + arrayS[1] + ", " + arrayS[2] + ", " + arrayS[3] + ", " + arrayS[4] + ", " + arrayS[5] + ", " + arrayS[6] +"\n Offending item is: Birth day");
continue;
}try{
bMonth = Integer.parseInt(arrayS[3].trim());//gets four line in csv- birth month
}catch (NumberFormatException nfe){
System.err.println("Error found in" + arrayS[0] + ", " + arrayS[1] + ", " + arrayS[2] + ", " + arrayS[3] + ", " + arrayS[4] + ", " + arrayS[5] + ", " + arrayS[6] +"\n Offending item is: Birth month");
continue;
}try{
bYear = Integer.parseInt(arrayS[4].trim());//gets fifth line in csv- birth year
}catch (NumberFormatException nfe){
System.err.println("Error found in" + arrayS[0] + ", " + arrayS[1] + ", " + arrayS[2] + ", " + arrayS[3] + ", " + arrayS[4] + ", " + arrayS[5] + ", " + arrayS[6] +"\n Offending item is: Birth year");
continue;
}try{
weight = Integer.parseInt( arrayS[5].trim());//gets sixth line in csv- weight
}catch (NumberFormatException nfe){
System.err.println("Error found in" +arrayS[0] + ", " + arrayS[1] + ", " + arrayS[2] + ", " + arrayS[3] + ", " + arrayS[4] + ", " + arrayS[5] + ", " + arrayS[6] +"\n Offending item is: Weight");
continue;
}try{
height = Double.parseDouble(arrayS[6].trim());//gets seventh line in csv- height
}catch (NumberFormatException nfe){
System.err.println("Error found in" + arrayS[0] + ", " + arrayS[1] + ", " + arrayS[2] + ", " + arrayS[3] + ", " + arrayS[4] + ", " + arrayS[5] + ", " + arrayS[6] +"\n Offending item is: Height");
continue;
}
System.out.printf("%15s%15s%02d/%02d/%4d %d %.1f\n" , fName , lName , bDay , bMonth , bYear , weight , height);
}catch(NumberFormatException nfe ){
System.out.println("Cannot read student:" + fName);
continue;
}}```
Do not write the output directly to System.out and System.err but instead collect them first. You can use different approaches like using a List<String> or use a StringBuilder. When you have read the CSV file completely you can finally output the result you have collected at the end, first the errors and then the error-free entries. The code can look like this:
List<String> errors = new ArrayList<String>();
List<String> output = new ArrayList<String>();
while (/*reading a line */) {
/* [...] */
try {
/* [...] */
output.add(String.format("...", a, b, c, d, ...);
} catch (...) {
errors.add(...);
}
}
// now show the result, but show the errors first
if (!errors.isEmpty()) {
System.err.println("There were errors:");
for (String str: errors) {
System.err.println(str);
}
}
System.out.println("Your result");
for (String str: output) {
System.out.println(str);
}

.txt array out from user input

I have since updated this code per suggestions for this forum. I am still confused as to how to get my .txt file selection to out print all instances of the name entered. my file in which all my .txt files are contained is named, namesbystate. To access this and all instances of the names entered are where I am getting issues. I am wondering if I replace myFile with namesbystate as a pathway extension or not?
package babynamestatesocial;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class BabyNameStateSocial {
private Scanner x;
public static void main(String[] args) throws FileNotFoundException {
// Scanner variable set up to intake user input for state selection and person's name
Scanner scan = new Scanner(System.in);
System.out.println("Available state files are: \n" +
"AK " + "AL " + "AR " + "AZ " + "CA " + "CO " + "\n" +
"CT " + "DC " + "DE " + "FL " + "GA " + "HI " + "\n" +
"IA " + "ID " + "IL " + "IN " + "KS " + "KY " + "\n" +
"LA " + "MA " + "MD " + "ME " + "MI " + "MN " + "\n" +
"MO " + "MS " + "MT " + "NC " + "ND " + "NE " + "\n" +
"NH " + "NJ " + "NM " + "NV " + "NY " + "OH " + "\n" +
"OK " + "OR " + "PA " + "RI " + "SC " + "SD " + "\n" +
"TN " + "TX " + "UT " + "VA " + "VT " + "WA " + "\n" +
"WI " + "WV " + "WY " + "\n");
System.out.print("Enter a state to read names from: " + "\n");
String filename = scan.nextLine() + ".txt";
System.out.println("Which name would you like to look up?");
String personName = scan.nextLine();
File myFile = new File(filename);
openFile(myFile,personName);
}
private static void openFile(File myFile, String personName){
try {
Scanner sc = new Scanner(myFile);
while (sc.hasNext()) {
// nextLine variable now has the line from the file in it that matches the name the person input
String nextLine = sc.nextLine();
if (nextLine.contains(personName)) {
}
}
} catch(FileNotFoundException e) {
System.out.print(e.getMessage());
}
}
}
Something like this will get you to where you want to be. I do not have the format of your state text files so I couldn't write the full program for you
(Edit - I just changed the code slightly. Instead of sc.next(), I should have written sc.nextLine(). The following program runs successfully with that edit):
package babynamestatesocial;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class BabyNameStateSocial {
private Scanner x;
public static void main(String[] args) throws FileNotFoundException {
Scanner scan = new Scanner(System.in);
System.out.println("Available state files are: \n" +
"AK " + "AL " + "AR " + "AZ " + "CA " + "CO " + "\n" +
"CT " + "DC " + "DE " + "FL " + "GA " + "HI " + "\n" +
"IA " + "ID " + "IL " + "IN " + "KS " + "KY " + "\n" +
"LA " + "MA " + "MD " + "ME " + "MI " + "MN " + "\n" +
"MO " + "MS " + "MT " + "NC " + "ND " + "NE " + "\n" +
"NH " + "NJ " + "NM " + "NV " + "NY " + "OH " + "\n" +
"OK " + "OR " + "PA " + "RI " + "SC " + "SD " + "\n" +
"TN " + "TX " + "UT " + "VA " + "VT " + "WA " + "\n" +
"WI " + "WV " + "WY " + "\n");
System.out.print("Enter a state to read names from: " + "\n");
String filename = scan.nextLine() + ".txt";
System.out.println("Which name would you like to look up?");
String personName = scan.nextLine();
File myFile = new File(filename);
openFile(myFile,personName);
}
private static void openFile(File myFile, String personName){
try {
Scanner sc = new Scanner(myFile);
while (sc.hasNext()) {
String nextLine = sc.nextLine();
if (nextLine.contains(personName)) {
//nextLine variable now has the line from the file in it that matches the name the person input so you need to parse that line and do something with it
}
}
} catch(Exception e) {
System.out.print(e.getMessage());
}
}
}

New method for Euler 13, code not working properly

Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.
I have basically tried to add the last digit of the each number and then keep the last digit of the sum in an array while the remaining digits get added to the second last digit and so on..
For some reason I cannot get the correct output, I have been looking for 2 hours but cannot find the an error.
This is the code:
public class Thirteen
{
public static void main(String[] args)
{
String numbers[] = {"37107287533902102798797998220837590246510135740250 ",
"46376937677490009712648124896970078050417018260538 ",
"74324986199524741059474233309513058123726617309629 ",
"91942213363574161572522430563301811072406154908250 ",
"23067588207539346171171980310421047513778063246676 ",
"89261670696623633820136378418383684178734361726757 ",
"28112879812849979408065481931592621691275889832738 ",
"44274228917432520321923589422876796487670272189318 ",
"47451445736001306439091167216856844588711603153276 ",
"70386486105843025439939619828917593665686757934951 ",
"62176457141856560629502157223196586755079324193331 ",
"64906352462741904929101432445813822663347944758178 ",
"92575867718337217661963751590579239728245598838407 ",
"58203565325359399008402633568948830189458628227828 ",
"80181199384826282014278194139940567587151170094390 ",
"35398664372827112653829987240784473053190104293586 ",
"86515506006295864861532075273371959191420517255829 ",
"71693888707715466499115593487603532921714970056938 ",
"54370070576826684624621495650076471787294438377604 ",
"53282654108756828443191190634694037855217779295145 ",
"36123272525000296071075082563815656710885258350721 ",
"45876576172410976447339110607218265236877223636045 ",
"17423706905851860660448207621209813287860733969412 ",
"81142660418086830619328460811191061556940512689692 ",
"51934325451728388641918047049293215058642563049483 ",
"62467221648435076201727918039944693004732956340691 ",
"15732444386908125794514089057706229429197107928209 ",
"55037687525678773091862540744969844508330393682126 ",
"18336384825330154686196124348767681297534375946515 ",
"80386287592878490201521685554828717201219257766954 ",
"78182833757993103614740356856449095527097864797581 ",
"16726320100436897842553539920931837441497806860984 ",
"48403098129077791799088218795327364475675590848030 ",
"87086987551392711854517078544161852424320693150332 ",
"59959406895756536782107074926966537676326235447210 ",
"69793950679652694742597709739166693763042633987085 ",
"41052684708299085211399427365734116182760315001271 ",
"65378607361501080857009149939512557028198746004375 ",
"35829035317434717326932123578154982629742552737307 ",
"94953759765105305946966067683156574377167401875275 ",
"88902802571733229619176668713819931811048770190271 ",
"25267680276078003013678680992525463401061632866526 ",
"36270218540497705585629946580636237993140746255962 ",
"24074486908231174977792365466257246923322810917141 ",
"91430288197103288597806669760892938638285025333403 ",
"34413065578016127815921815005561868836468420090470 ",
"23053081172816430487623791969842487255036638784583 ",
"11487696932154902810424020138335124462181441773470 ",
"63783299490636259666498587618221225225512486764533 ",
"67720186971698544312419572409913959008952310058822 ",
"95548255300263520781532296796249481641953868218774 ",
"76085327132285723110424803456124867697064507995236 ",
"37774242535411291684276865538926205024910326572967 ",
"23701913275725675285653248258265463092207058596522 ",
"29798860272258331913126375147341994889534765745501 ",
"18495701454879288984856827726077713721403798879715 ",
"38298203783031473527721580348144513491373226651381 ",
"34829543829199918180278916522431027392251122869539 ",
"40957953066405232632538044100059654939159879593635 ",
"29746152185502371307642255121183693803580388584903 ",
"41698116222072977186158236678424689157993532961922 ",
"62467957194401269043877107275048102390895523597457 ",
"23189706772547915061505504953922979530901129967519 ",
"86188088225875314529584099251203829009407770775672 ",
"11306739708304724483816533873502340845647058077308 ",
"82959174767140363198008187129011875491310547126581 ",
"97623331044818386269515456334926366572897563400500 ",
"42846280183517070527831839425882145521227251250327 ",
"55121603546981200581762165212827652751691296897789 ",
"32238195734329339946437501907836945765883352399886 ",
"75506164965184775180738168837861091527357929701337 ",
"62177842752192623401942399639168044983993173312731 ",
"32924185707147349566916674687634660915035914677504 ",
"99518671430235219628894890102423325116913619626622 ",
"73267460800591547471830798392868535206946944540724 ",
"76841822524674417161514036427982273348055556214818 ",
"97142617910342598647204516893989422179826088076852 ",
"87783646182799346313767754307809363333018982642090 ",
"10848802521674670883215120185883543223812876952786 ",
"71329612474782464538636993009049310363619763878039 ",
"62184073572399794223406235393808339651327408011116 ",
"66627891981488087797941876876144230030984490851411 ",
"60661826293682836764744779239180335110989069790714 ",
"85786944089552990653640447425576083659976645795096 ",
"66024396409905389607120198219976047599490197230297 ",
"64913982680032973156037120041377903785566085089252 ",
"16730939319872750275468906903707539413042652315011 ",
"94809377245048795150954100921645863754710598436791 ",
"78639167021187492431995700641917969777599028300699 ",
"15368713711936614952811305876380278410754449733078 ",
"40789923115535562561142322423255033685442488917353 ",
"44889911501440648020369068063960672322193204149535 ",
"41503128880339536053299340368006977710650566631954 ",
"81234880673210146739058568557934581403627822703280 ",
"82616570773948327592232845941706525094512325230608 ",
"22918802058777319719839450180888072429661980811197 ",
"77158542502016545090413245809786882778948721859617 ",
"72107838435069186155435662884062257473692284509516 ",
"20849603980134001723930671666823555245252804609722 ",
"53503534226472524250874054075591789781264330331690 " };
String final_sum[]=new String[50];
int sum=0;
for(int x=49;x>=0;x--)
{
for(int y=0;y<100;y++)
{
int temp=Integer.parseInt(numbers[y].substring(x,x+1));
if(y==0)
{
temp=temp+sum;
sum=0;
}
sum=sum+temp;
}
String s=String.valueOf(sum)+" ";
int len=s.length();
final_sum[x]=s.substring(len-2,len-1);
sum=Integer.parseInt(s.substring(0,len-2));
}
System.out.println("ANSWER");
for(int x=0;x<50;x++)
{
System.out.print(final_sum[x]);
}
}
}
You can use BigInteger to work with such data.

Array index out of bounds exception 4 [duplicate]

This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
(26 answers)
Closed 6 years ago.
I keep getting an error when trying to delete or display the users that I've created. Pointing to the line of code where it actually does the deletion or displaying of a certain user. I can't seem to figure out where the error is coming from.
import java.util.*;
public class contactInfo {
public static void main(String[] args) {
String tracker[][] = {
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",},
{" ", " ", " ", " ",}
};
Scanner input = new Scanner(System.in);
int picker = 0;
while (true) {
System.out.print("Please choose an option: \n 1. Add a user \n 2. Delete a user \n 3. Display a user \n 4. Quit ");
picker = input.nextInt();
if (picker == 1) {
addUser(tracker);
} else if (picker == 2) {
deleteUser(tracker);
} else if (picker == 3) {
displayUser(tracker);
} else {
break;
}
}
}
public static String[][] addUser(String[][] add) {
Scanner input = new Scanner(System.in);
System.out.print("Which user is this information for (1 - 10): ");
int user = input.nextInt();
System.out.println(" ");
System.out.print("Enter the users first name: ");
add[user][0] = input.next();
System.out.println(" ");
System.out.print("Enter the users last name: ");
add[user][1] = input.next();
System.out.println(" ");
System.out.print("Enter the users phone number (without dashes): ");
add[user][2] = input.next();
System.out.println(" ");
System.out.print("Enter the users age: ");
add[user][3] = input.next();
System.out.println(" ");
return add;
}
public static String[][] deleteUser(String[][] del) {
Scanner input = new Scanner(System.in);
System.out.print("Which user would you like to delete?: ");
int user = input.nextInt();
for (int i = 0; i < del.length - 1; i++) {
del[user][i] = " ";
}
return del;
}
public static String[][] displayUser(String[][] displ) {
Scanner input = new Scanner(System.in);
System.out.print("Which user would you like to display?: ");
int user = input.nextInt();
for (int i = 0; i < displ.length; i++) {
System.out.print(displ[user][i] + " ");
}
return displ;
}
}
Your tracker is a 2-dimensional array. 10 rows of 4 strings each. The problem is this code:
for (int i = 0; i < del.length - 1; i++)
{
del[user][i] = " ";
}
You iterate over the array of 4 strings, but the variable i will go from 0 to 8. What you want is something like:
for (int i = 0; i < del[user].length; i++)
{
del[user][i] = " ";
}
Instead of using displ.length or del.length for you limits, use displ[user].length or del[user].length.

Output on new line WITHOUT for loop

I am trying to output arrays on a new line through a basic client, server application. However, to accomplish this I have had to use substring to find the # after each word to signal the end of the line. However I want to remove this function and have each section on a new line.
public ClientHandler(Socket socket,Users newUser, int newClientUser)
throws IOException
{
client = socket;
input = new Scanner(client.getInputStream());
output = new PrintWriter(
client.getOutputStream(),true);
user = newUser;
clientUser = newClientUser;
String[] itemName = {user.getItemName(1), user.getItemName(2)};
String[] description = {user.getItemDescription(1), user.getItemDescription(2)};
String[] itemtime = {user.getItemTime(1), user.getItemTime(2)};
output.println(itemName[0] + "#" + itemName[1]
+ "#" + "Welcome To The Auction User:" + clientUser
+ itemName[0] +": "+ description[0] +
"#"+ itemName[1] +": "+description[1]+
"#"+ "Deadline For " + itemName[0] + ": "
+ itemtime[0] + "#" +"Deadline For " +
itemName[1] + ": " + itemtime[1]+"#");
}
private synchronized void getMessage(String response)
{
String message="";
for(int i= count; !response.substring(i, i+1).equals("#"); i++)
{
count = i;
}
}
output.println(itemName[0] + "\n" + itemName[1]
+ "\n" + "Welcome To The Auction User:" + clientUser
+ itemName[0] +": "+ description[0] +
"\n"+ itemName[1] +": "+description[1]+
"\n"+ "Deadline For " + itemName[0] + ": "
+ itemtime[0] + "\n" +"Deadline For " +
itemName[1] + ": " + itemtime[1]+"\n");
Instead of having a "#" signify a new line, you can use "\n". Java will read that from your string as a new line.

Categories

Resources