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 9 years ago.
Improve this question
Here is my error message
Exception in thread "main" java.lang.IllegalArgumentException
at TestGrades.setRaceTime(TestGrade.java:49)
at GradeDriver.getGradeData(GradeDriver.java:40)
at Grade Driver.main(GradeDriver.java:26)
Java-Class:
import java.util.*;
import java.io.*;
public class GradeDriver{
public static void main(String[] args){
double[] averageInfo = new double[3];
Scanner console = new Scanner(System.in);
String[] fileName = new String[2];
for(int i = 0; i < args.length; i++){
fileName[i] = args[i];
}
Scanner input = getInputFile(console, fileName);
PrintStream output = getOutputFile(console, fileName);
TestGrades[] grades = getGradeData(input);
showGradeInfo(output, grades);
getAverageInfo(averageInfo, grades);
showAverageInfo(output, averageInfo, grades[0]);
}
public static TestGrades[] getGradeData(Scanner input) {
int numberOfGrades = input.nextInt();
TestGrades[] grades = new TestGrades[numberOfGrades];
for(int driver = 0; driver < numberOfGrades && input.hasNext(); driver++) {
grades[driver] = new TestGrades(input.next(), input.next());
for (int grade = 1; grade <= 4; grade++) {
grades[driver].setRaceTime(grade , input.nextDouble());
}
}
return grades;
}
public static void showGradeInfo (PrintStream output, TestGrades[] grades) {
for (int i = 0; i < grades.length; i++) {
output.print(( i + 1 ) + ". " + grades[i] + "\n");
}
}
public static void getAverageInfo (double[] info, TestGrades[] grades) {
double low = 20.0;
double high = 0.0;
double average = 0.0;
double totalAverage = 0.0;
for (int i = 0; i < grades.length; i++) {
average = grades[i].getGradeAverage();
if (average > high) {
high = average;
}
if (average < low) {
low = average;
}
totalAverage = totalAverage + average;
}
info[0] = low;
info[1] = high;
info[2] = totalAverage/grades[0].getCounter();
}
public static void showAverageInfo(PrintStream o, double[] info, TestGrades d) {
String[] s = {"Total number of students: "};
o.printf("\n%d. %s %d\n", 1, s[0], d.getCounter());
for (int i = 1; i <info.length; i++) {
o.printf("%d. %s %.2f/n", i + i, s[i], info[i - 1]);
}
}
public static Scanner getInputFile(Scanner console, String[] inFileName) {
boolean fileFound = false;
Scanner s = null;
if (inFileName[0] == null) {
System.out.print("Please enter the input file name: ");
inFileName[0] = console.nextLine();
}
do {
try {
s = new Scanner(new File(inFileName[0]));
fileFound = true;
}
catch (FileNotFoundException e) {
System.out.println("Cannot read file: " + e) ;
System.out.println("Enter the correct input file name: ");
inFileName[0] = console.nextLine();
}
}
while (!fileFound);
return s;
}
public static PrintStream getOutputFile (Scanner console, String[] outFileName) {
boolean fileFound = false;
PrintStream pS = null;
if (outFileName[1] == null) {
System.out.print("Please enter output file name: ");
outFileName[1] = console.nextLine();
}
do {
try {
pS = new PrintStream (new File (outFileName[1]));
fileFound = true;
}
catch (FileNotFoundException e2) {
System.out.println("Cannot read file: " + e2);
System.out.println("Enter a correct output file name: ");
outFileName[1] = console.nextLine();
}
}
while(!fileFound);
return pS;
}
}
import java.io.*;
import java.util.*;
public class TestGrades {
private static int gradeCount = 0;
private String firstName;
private String lastName;
private double[] raceTime = new double[4];
public TestGrades(String fName, String lName) {
firstName = fName;
lastName = lName;
gradeCount++;
}
private String getFirstName() {
return firstName;
}
private String getLastName() {
return lastName;
}
public double getGradeAverage() {
double highest = 0.0;
double sum = 0.0;
for (int i = 0; i < raceTime.length; i++) {
sum += raceTime[i];
if (raceTime[i] > highest) {
highest = raceTime[i];
}
}
sum = sum - highest;
sum = sum / 3;
return sum;
}
public void setRaceTime(int grade, double time) {
if (grade < 1 || grade > 4 || time < 0.0 || time > 15.0) {
throw new IllegalArgumentException();
}
raceTime[grade - 1 ] = time;
}
public int getCounter() {
return gradeCount;
}
public String toString() {
return (firstName + " " + lastName);
}
}
Any help would really be appreciated!
It looks like you threw the IllegalArgumentException yourself.
if (grade < 1 || grade > 4 || time < 0.0 || time > 15.0) {
throw new IllegalArgumentException();
}
But you didn't supply a message as an argument to the constructor. You should supply a message that will make more sense when displayed, for example:
throw new IllegalArgumentException("grade (" + grade + ") or time (" + time +
") outside of legal range.");
You are probably entering a time value outside of your range.
You are throwing the exception yourself...
if (grade < 1 || grade > 4 || time < 0.0 || time > 15.0) {
throw new IllegalArgumentException();
}
Related
How to find common suffix in java by using method
public static String commonSuffix (String s1, String s2)
I can't return the result in method. Please help me
import java.util.Scanner;
public class ders1 {
public static void main(String[] args) {
//HW3 Topic 3
Scanner input = new Scanner(System.in);
String reverse1="";
String reverse2="";
System.out.println("Please enter the first string: ");
String s1=input.nextLine();
System.out.println("Please enter the second string: ");
String s2=input.nextLine();
int l1=reverse1.length();
int l2=reverse2.length();
for ( int i = s1.length() - 1 ; i >= 0 ; i-- )
{
reverse1 = reverse1 + s1.charAt(i);
}
for ( int i = s2.length() - 1 ; i >= 0 ; i-- )
{
reverse2 = reverse2 + s2.charAt(i);
}
if(l1<l2){
int l3=l2;
System.out.println(reverse1 + " " + reverse2);
System.out.println(commonSuffix(reverse1,reverse2,l3));
}
else {
int l3=l1;
System.out.println(reverse1 + " " + reverse2);
System.out.println(commonSuffix(reverse1,reverse2,l3));
}
}
public static String commonSuffix (String reverse1, String reverse2,int l3){
String suffixies="";
for(int k=0; k<=l3 ; k++){
if(reverse1.charAt(k)!=reverse2.charAt(k)){
}
else{
suffixies+=reverse1.charAt(k);
}
}
return suffixies;
}
}
Can someone help me fix this code??
Your issue is that you return inside of the for loop. You should return after the for loop terminates.
Please see the following code (I have tested it):
import java.util.Scanner;
public class ders1 {
public static void main(String[] args) {
// HW3 Topic 3
Scanner input = new Scanner(System.in);
String reverse1 = "";
String reverse2 = "";
System.out.println("Please enter the first string: ");
String s1 = input.nextLine();
System.out.println("Please enter the second string: ");
String s2 = input.nextLine();
for (int i = s1.length() - 1; i >= 0; i--) {
reverse1 = reverse1 + s1.charAt(i);
}
for (int i = s2.length() - 1; i >= 0; i--) {
reverse2 = reverse2 + s2.charAt(i);
}
int l1 = reverse1.length();
int l2 = reverse2.length();
if (l1 < l2) {
int l3 = l1;
System.out.println(reverse1 + " " + reverse2);
System.out.println(commonSuffix(reverse1, reverse2, l3));
} else {
int l3 = l2;
System.out.println(reverse1 + " " + reverse2);
System.out.println(commonSuffix(reverse1, reverse2, l3));
}
}
public static String commonSuffix(String reverse1, String reverse2, int l3) {
String suffixies = "";
for (int k = 0; k < l3; k++) {
if (reverse1.charAt(k) != reverse2.charAt(k)) {
break;
} else {
suffixies += reverse1.charAt(k);
}
}
// Reverse again
String reverse = "";
for (int i = suffixies.length() - 1; i >= 0; i--) {
reverse = reverse + suffixies.charAt(i);
}
return reverse;
}
}
Output:
Please enter the first string:
caption
Please enter the second string:
action
noitpac noitca
tion
This could be the best
**
package com.tm;
import java.util.Scanner;
public class CommSuffix {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str[] = scan.nextLine().split(",");
String commSufffix=null;
if(str[0].trim().length() > str[1].trim().length()) {
String temp = str[0].trim();
str[0] = str[1].trim();
str[1] = temp;
}
for(int i=0;i<str[0].length();i++) {
String subStr = str[0].substring(i,str[0].length());
if(str[1].endsWith(subStr)) {
commSufffix = subStr;
break;
}
}
System.out.println(commSufffix);
}
} **
I'm doing an assignment where the goal is to, among other things, to add two large integers. Here is my code, spread out into four files.
Main that we cannot change:
import java.util.*;
import MyUtils.MyUtil;
public class CSCD210HW7
{
public static void main(String [] args)throws Exception
{
int choice;
String num;
LargeInt one, two, three = null;
Scanner kb = new Scanner(System.in);
num = HW7Methods.readNum(kb);
one = new LargeInt(num);
num = HW7Methods.readNum(kb);
two = new LargeInt(num);
do
{
choice = MyUtil.menu(kb);
switch(choice)
{
case 1: System.out.println(one + "\n");
break;
case 2: System.out.println("The value of the LargeInt is: " + two.getValue() + "\n");
break;
case 3: num = HW7Methods.readNum(kb);
one.setValue(num);
break;
case 4: if(one.equals(two))
System.out.println("The LargeInts are equal");
else
System.out.println("The LargeInts are NOT equal");
break;
case 5: three = two.add(one);
System.out.printf("The results of %s added to %s is %s\n", one.getValue(), two.getValue(), three.getValue());
break;
case 6: HW7Methods.displayAscendingOrder(one, two, three);
break;
default: if(two.compareTo(one) < 0)
System.out.printf("LargeInt %s is less than LargeInt %s\n", two.getValue(), one.getValue());
else if(two.compareTo(one) > 0)
System.out.printf("LargeInt %s is greater than LargeInt %s\n", two.getValue(), one.getValue());
else
System.out.printf("LargeInt %s is equal to LargeInt %s\n", two.getValue(), one.getValue());
break;
}// end switch
}while(choice != 8);
}// end main
}// end class
LargeInt Class(Custom Class We Created)
public class LargeInt implements Comparable<LargeInt>
{
private int[]myArray;
private LargeInt()
{
this("0");
}
public LargeInt(final String str)
{
this.myArray = new int[str.length()];
for(int x = 0; x < this.myArray.length; x++)
{
this.myArray[x] = Integer.parseInt(str.charAt(x)+ "");
}
}
public LargeInt add(final LargeInt passedIn)
{
String stringOne = myArray.toString();
String stringTwo = passedIn.myArray.toString();
int r = Integer.parseInt(stringOne);
int e = Integer.parseInt(stringTwo);
int s = r + e;
return new LargeInt(""+s);
}
public void setValue(final String arrayString)
{
this.myArray = new int[arrayString.length()];
for(int x = 0; x < myArray.length; x++)
{
this.myArray[x]=arrayString.charAt(x);
}
}
#Override
public int compareTo(LargeInt passedIn)
{
if(passedIn == null)
{
throw new RuntimeException("NullExceptionError");
}
int ewu = 0;
int avs = 0;
if(this.myArray.length != passedIn.myArray.length)
{
return this.myArray.length - passedIn.myArray.length;
}
for(int i = 0; i < this.myArray.length -1; i++)
{
if(this.myArray[i] != passedIn.myArray[i])
{
return this.myArray[i]-passedIn.myArray[i];
}
}
return ewu-avs;
}
public int hashCode()
{
String p = "";
for(int f = 0; f < this.myArray.length; f++)
{
p += myArray[f];
}
return p.hashCode();
}
public String getValue()
{
String h = "";
for(int t = 0; t < this.myArray.length; t++)
{
h += myArray[t];
}
return h;
}
#Override
public boolean equals(Object jbo)
{
if(jbo == null)
{
return false;
}
if(!(jbo instanceof LargeInt))
{
return false;
}
LargeInt k =(LargeInt)jbo;
if(k.myArray.length != this.myArray.length)
{
return false;
}
for(int d = 0; d < this.myArray.length; d++)
{
if(k.myArray[d] != myArray[d])
{
return false;
}
}
return true;
}
#Override
public String toString()
{
String c = "";
for(int q = 0; q < this.myArray.length; q++)
{
c += myArray[q];
}
return "The LargeInt is: " + c;
}
}
HW7Methods File
import java.util.*;
import java.io.*;
public class HW7Methods
{
public static String readNum(Scanner kb)
{
String num = "";
System.out.print("Enter Your Large Int: ");
num = kb.nextLine();
return num;
}
public static void displayAscendingOrder(final LargeInt first, final LargeInt second, final LargeInt third)
{
String highestInt;
if(first.compareTo(second) >= 0 && first.compareTo(third) >= 0)
{
highestInt = first.getValue();
}
else if(second.compareTo(first) >= 0 && second.compareTo(third) >= 0)
{
highestInt = second.getValue();
}
else
{
highestInt = third.getValue();
}
String middleInt;
if(first.compareTo(second) >= 0 && first.compareTo(third) <= 0)
{
middleInt = first.getValue();
}
else if(second.compareTo(first) >= 0 && second.compareTo(third) <= 0)
{
middleInt = second.getValue();
}
else
{
middleInt = third.getValue();
}
String lowestInt;
if(first.compareTo(second) <= 0 && first.compareTo(third) <= 0)
{
lowestInt = first.getValue();
}
else if(second.compareTo(first) <= 0 && second.compareTo(third) <= 0)
{
lowestInt = second.getValue();
}
else
{
lowestInt = third.getValue();
}
System.out.println("The LargeInts in order are: " + lowestInt + ", " + middleInt + ", " + highestInt);
}
}
MyUtil file
package MyUtils;
import java.io.*;
import java.util.Scanner;
public class MyUtil
{
public static int menu(Scanner kb)
{
int userChoice;
System.out.println("1) Print First Int");
System.out.println("2) Print Second Int");
System.out.println("3) Add Different Int");
System.out.println("4) Check If Equal");
System.out.println("5) Add Large Ints");
System.out.println("6) Display In Ascending Order");
System.out.println("7) Compare Ints");
System.out.println("8) Quit");
kb = new Scanner(System.in);
System.out.print("Please Select Your Choice: ");
userChoice = kb.nextInt();
while(userChoice < 1 || userChoice > 8)
{
System.out.print("Invalid Menu Choice. Please Re-Enter: ");
userChoice = kb.nextInt();
}
return userChoice;
}
}
When I go to run this code, it prompts me for two Large Integers like it's supposed to. However, when I choose option 5 to add them, this is what I get:
Exception in thread "main" java.lang.NumberFormatException: For input string: "[I#55f96302"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at LargeInt.add(LargeInt.java:24)
at CSCD210HW7.main(CSCD210HW7.java:41)
I've never seen that type of error before. Can someone tell me what is going on?
For input string: "[I#55f96302
That is not a "proper" String you are trying to parse here.
This is what an int[] looks like when you call toString() on it.
String stringOne = myArray.toString();
Why do you do that? What is that supposed to do?
int r = Integer.parseInt(stringOne);
int e = Integer.parseInt(stringTwo);
int s = r + e;
From the looks of it, you try to handle "large" ints with your LargeInt class by somehow storing them in an array of ints. That's okay, BigInteger also works like that (more or less), but you cannot just do calculations by trying to convert back to int (after all those numbers are too big for int arithmetic to handle, even if you do the string parsing properly).
Currently, I'm trying to read in a .dat file and assign various lines into an array. The file will provide items like "a100" and "q80" which I will have to separate into categories by letter and then have different grades as an array for each category. Right now, this is what I have, but I'm getting a lot of run-time errors when I try various things. Is there something I'm missing here?
Some of the errors I'm having:
When I execute case 'P', it prints this out: WeightedGrades#13105f32
When I try to execute cases C, A or D, this happens: Exception in thread "main" java.lang.NoSuchMethodError: WeightedGrades.deleteGrade(Ljava/lang/String;)Z
WeightedGrades class:
public class WeightedGrades {
private String name;
private int numGrades;
private String[] grades;
public static final double ACTV_WT = 0.05, QUIZ_WT = 0.10, PROJ_WT = 0.25, EXAM_WT = 0.30, FINAL_EXAM_WT = 0.30;
public WeightedGrades(String nameIn, int numGradesIn, String[] gradesIn) {
name = nameIn;
numGrades = numGradesIn;
grades = gradesIn;
}
public String getName() {
return name;
}
public int getNumGrades() {
return numGrades;
}
public String[] getGrades() {
return grades;
}
public double[] gradesByCategory(char categoryChar) {
int count = 0;
for (int i = 0; i < grades.length; i++) {
if (categoryChar == grades[i].charAt(0)) {
count++;
}
}
double[] gradesNew = new double[count];
count = 0;
for( int i = 0; i < numGrades; i++) {
if (categoryChar == grades[i].charAt(0)) {
gradesNew[count] = Double.parseDouble(grades[i].substring(1));
count++;
}
}
return gradesNew;
}
public String toString() {
String result = "\tStudent Name: " + getName()
+ "\n\tActivities: " + gradesByCategory('A')
+ "\n\tQuizzes: " + gradesByCategory('Q')
+ "\n\tProjects: " + gradesByCategory('P')
+ "\n\tExams: " + gradesByCategory('E')
+ "\n\tFinal Exam: " + gradesByCategory('F')
+ "\n\tCourse Average: " + courseAvg();
return result;
}
public void addGrade(String newGrade) {
if (numGrades >= grades.length) {
increaseGradesCapacity();
}
grades[numGrades] = newGrade;
numGrades++;
}
public boolean deleteGrade(String gradeDelete) {
boolean delete = false;
int deleteIndex = -1;
for (int i = 0; i < numGrades; i++) {
if (gradeDelete.charAt(0) == grades[i].charAt(0) &&
Double.parseDouble(gradeDelete.substring(1))
== Double.parseDouble(grades[i].substring(1))) {
deleteIndex = i;
}
}
if (deleteIndex > -1) {
for (int i = deleteIndex; i < numGrades - 1; i++) {
grades[i] = grades[i + 1];
}
grades[numGrades - 1] = "";
numGrades--;
return true;
}
else {
return false;
}
}
public void increaseGradesCapacity() {
String[] temporary = new String[grades.length + 1];
for (int i = 0; i < grades.length; i++) {
temporary[i] = grades[i];
}
grades = temporary;
}
public double average(double[] newArray) {
if (newArray.length == 0) {
return 0.0;
}
double sum = 0;
double average = 0;
for ( int i = 0; i < newArray.length; i++) {
sum += newArray[i];
average = sum / newArray.length;
}
return average;
}
public double courseAvg() {
double actvAvg = 0.0;
double quizAvg = 0.0;
double projAvg = 0.0;
double examAvg = 0.0;
double finalAvg = 0.0;
double avg = 0.0;
if (!numGrades.length == 0) {
avg = actvAvg * ACTV_WT + quizAvg * QUIZ_WT + projAvg * PROJ_WT + examAvg * EXAM_WT + finalAvg * FINAL_EXAM_WT;
}
return avg;
}
}
Second class
import java.util.Scanner;
import java.io.IOException;
public class WeightedGradesApp {
public static void main(String[] args) throws IOException {
String name = "";
int numGrades = 0;
String[] grades = new String[13];
String code = "";
String gradeAdd = "";
String gradeDelete = "";
String categoryIn = "";
WeightedGrades student = new WeightedGrades(name, numGrades, grades);
Scanner userInput = new Scanner(System.in);
if (args == null) {
System.out.println("File name was expected as a run argument.");
System.out.println("Program ending.");
return;
}
else {
System.out.println("File read in and WeightedGrades object created.");
System.out.println("");
System.out.println("Player App Menu");
System.out.println("P - Print Report");
System.out.println("C - Print Category");
System.out.println("A - Add Grade");
System.out.println("D - Delete Grade");
System.out.println("Q - Quit ");
do {
System.out.print("Enter Code [P, C, A, D, or Q]: ");
code = userInput.nextLine();
if (code.length() == 0) {
continue;
}
code = code.toUpperCase();
char codeChar = code.charAt(0);
switch (codeChar) {
case 'P':
System.out.println(student.toString());
break;
case 'C':
System.out.print(" Category: ");
categoryIn = userInput.nextLine();
char categoryChar = categoryIn.charAt(0);
System.out.println(student.gradesByCategory(categoryChar));
break;
case 'A':
System.out.print(" Grade to add: ");
gradeAdd = userInput.nextLine();
student.addGrade(gradeAdd);
break;
case 'D':
System.out.print(" Grade to delete: ");
gradeDelete = userInput.nextLine();
boolean isDeleted = student.deleteGrade(gradeDelete);
if (isDeleted) {
System.out.println(" Grade deleted");
}
else {
System.out.println(" Grade not found");
}
break;
case 'Q':
break;
default:
}
} while (!code.equalsIgnoreCase("Q"));
}
}
}
For starters your code as is doesn't compile due to the line
if (!numGrades.length == 0) {
This is because numGrades is an int it is a primative type and therefore does not have any property length. I'm assuming what you want here is
if (numGrades != 0) {
Also as I mentioned you are not dealing with reading in the file, you supply the file name but never actually read it, I suggest you look at the Java tutorial on File IO
On this note you do the check args == null this will not check that no args are supplied, try it. what you want is args.length == 0
On your other error I have no idea how you even produced that... I'm assuming it is using an older compiled version of the class where the methods have not being written.
This is a simple program that I wrote to do calculations on integers from a txt file. After a few hours of trying to debug, I was hoping a fresh set of eyes could spot a few of my problems. EDIT: data.txt contains integers 1-5. One integer per line.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Calculator {
public static int[] NUMBERS; //global value for the array
public static void main(String[] args) throws FileNotFoundException {
File file = new File("data.txt");
Scanner sc = new Scanner(file);
List x = new ArrayList();
while (sc.hasNextInt()) {
x.add(sc.nextInt());
}
NUMBERS = new int[x.size()];
Iterator<Integer> iterator = x.iterator();
for (int i = 0; i < NUMBERS.length; i++) {
NUMBERS[i] = iterator.next().intValue();
}
sc.close();
Scanner sc2 = new Scanner(file);
System.out.println("Welcome to Calculation Program!\n");
startMenus(sc2);
}
private static void startMenus(Scanner sca) throws FileNotFoundException {
while (true) {
System.out.println("(Enter option # and press ENTER)\n");
System.out.println("1. Display the average of the list");
System.out.println("2. Display the number of occurences of a given element in the list");
System.out.println("3. Display the prime numbers in a list");
System.out.println("4. Display the information above in table form");
System.out.println("5. Save the information onto a file in table form");
System.out.println("6. Exit");
int option = sca.nextInt();
sca.nextLine();
switch (option) {
case 1:
infoMenu1(sca);
break;
case 2:
infoMenu2(sca);
break;
case 3:
infoMenu3(sca);
break;
case 4:
infoMenu4(sca);
break;
case 5:
infoMenu5(sca);
break;
case 6:
System.exit(0);
default:
System.out.println("Unrecognized Option!\n");
}
}
}
private static void infoMenu1(Scanner sc2) {
System.out.println("The average of the numbers in the file is: " + avg(NUMBERS));
}
public static double avg(int[] numbers) {
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum = (sum + numbers[i]);
}
return (sum / numbers.length);
}
public static int occr(int[] numbers, int x) {
int count = 0;
for (int n : numbers) {
if (n == x) {
count = count + 1;
}
}
return count;
}
public static boolean prime(int x) {
boolean answer = true;
if (x == 0 || x == 1) {
return false;
}
for (int i = 2; i <= x / 2; i = i + 1) {
if (i != x) {
if (x % i == 0) {
answer = false;
}
}
}
return answer;
}
public static int[] primes(int[] numbers) {
int primesCount = 0;
for (int i : numbers) {
if (prime(i)) {
primesCount = (primesCount + 1);
}
}
if (primesCount == 0) {
return null;
}
int[] result = new int[primesCount];
int index = 0;
for (int i : numbers) {
if (prime(i)) {
result[index] = i;
index = index + 1;
}
}
return result;
}
private static void infoMenu2(Scanner sc) {
sc = new Scanner(System.in);
System.out.println("Which integer would you like to check for number of occurences?");
int choice = sc.nextInt();
System.out.println("The number of occurence(s) of " + choice + " are/is " + occr(NUMBERS, choice));
}
private static void infoMenu3(Scanner sc2) {
int[] myPrimes = primes(NUMBERS);
System.out.println("The prime number(s) in the file are/is: ");
for (int j = 0; j < myPrimes.length; ++j) {
System.out.println(myPrimes[j] + " ");
}
}
private static void infoMenu4(Scanner kb) throws FileNotFoundException {
File file = new File("data.txt");
Scanner sc = new Scanner(file);
int counter = 0;
while (sc.hasNextInt()) {
counter = counter++;
}
int lenth = counter;
int[] column1 = new int[lenth];
while (sc.hasNextInt()) {
column1 = new int[sc.nextInt()];
}
int[] column2 = new int[occr(NUMBERS, sc.nextInt())];
boolean column3 = prime(sc.nextInt());
System.out.printf("Average: " + "%20.2f", column1);
System.out.println();
System.out.printf("Occurences: " + "%14d", column2);
System.out.println();
System.out.printf("Primes:" + "%19s : %s", column3);
System.out.println();
}
private static void infoMenu5(Scanner kb) throws FileNotFoundException {
File file = new File("data.txt");
Scanner sc = new Scanner(file);
PrintWriter pw = new PrintWriter(new File("results.txt"));
int counter = 0;
while (sc.hasNextInt()) {
counter = counter++;
}
int lenth = counter;
int[] column1 = new int[lenth];
while (sc.hasNextInt()) {
column1 = new int[sc.nextInt()];
}
int[] column2 = new int[occr(NUMBERS, sc.nextInt())];
boolean column3 = prime(sc.nextInt());
pw.printf("Number: " + "%-10d", column1);
pw.println();
pw.printf("Occurences: " + "%12d", column2);
pw.println();
pw.printf("Primes:" + "%24s : %s", column3);
pw.println();
pw.close();
}
}
You are using wrong Scanner in your code (line 49). I suppose you are trying to get user input. However, you are using Scanner to get input from data.txt.
Updated according to the comments. Actually, you don't need Scanner from data.txt in startMenus. What you need is user input. So change sc2 to Scanner from System.in.
Original line 31:
// Scanner sc2 = new Scanner(file);
Scanner sc2 = new Scanner(System.in);
This is very interesting, i notice. Before i can explain further its best i show the code and you will understand what i mean.
This is the code:
public class Qn3 {
static BigDecimal[] accbal = new BigDecimal[19];
private static Integer[] accnums = new Integer[19];
public static void main(String[] args) {
addaccount();
}
public static void addAccount() {
int i = 0, accno, input, j, check;
BigDecimal accbala;
DecimalFormat df = new DecimalFormat("0.00");
Scanner sc = new Scanner(System.in);
Scanner in = new Scanner(System.in);
accnums[1] = new Integer(1);
while (accnums.length >= count(accnums)) {
System.out.print("Enter the account number: ");
while (sc.hasNext("[0-9]{7}")) {
accno = sc.nextInt();
System.out.print("Enter account balance: ");
accbala = in.nextBigDecimal();
for (j = 0; j < accnums.length; j++) {
if (accnums[j] == null)
break;
else if (accnums[j].equals(accno)) {
break;
}
}
if (j == accnums.length) {
System.out.print("No more than 20 accounts can be added.");
} else if (accnums[j] != null) {
if ((accnums[j].equals(accno)))
System.out.println("Account already exists");
break;
} else {
accnums[j] = accno;
accbala = accbala.setScale(2, RoundingMode.HALF_UP);
accbal[j] = accbala;
check = j;
System.out.println("Current number of accounts in the system: "
+ (check + 1)
+ "\nNumber of accounts still can be added: "
+ (20 - (check + 1)));
}
}
while (!sc.hasNext("[0-9]{7}")) {
System.out.println("Wrong NRIC");
break;
}
while (accnums.length <= count(accnums)) {
System.out.println("20 accounts have already been created");
break;
}
break;
}
}
private static int count(Integer[] array) {
int count = 0;
// accnums = new Integer[] {1,2};
for (int index = 0; index < array.length; index++) {
if (array[index] != null) {
count++;
}
}
// System.out.println("You have used " + count + " slots");
return count;
}
}
So now that you have seen the code the problem that is hard to notice is this, take note of the line in the addaccount() method where
System.out.println("Current number of accounts in the system: "+(check+1)+"\nNumber of accounts still can be added: "+(20 - (check+1)));
this line the first check+1 will give me 1 then the next one gives me 3! and then the next time i run the method it gives me 4 and then again 5 and so on so forth, what is happening to 2?
You have that println in an else block, and when j == 1 you're hitting the else if case. Try removing this line
accnums[1] = new Integer (1);