const
(только для C ++) Для людей, прибывающих с C, может показаться неожиданным, что в C ++ глобальные переменные const
имеют внутренние (или статические) связь. В C это не так, поскольку все глобальные переменные неявно extern
(т.е. когда отсутствует ключевое слово static
).
Пример:
// file1.cpp
const int test = 5; // in C++ same as "static const int test = 5"
int test2 = 5;
// file2.cpp
extern const int test;
extern int test2;
void foo()
{
int x = test; // linker error in C++ , no error in C
int y = test2; // no problem
}
correct would использовать файл заголовка и включить его в file2.cpp и file1.cpp
extern const int test;
extern int test2;
. В качестве альтернативы можно было бы объявить переменную const
в файле file1.cpp с явным extern
попробуйте это
int[] cw_Mark = new int[6];
for (int i = 0; i < cw_Mark.length; i++) {
System.out.println("Please Enter Your Module " + (i + 1) + " Coursework Mark: ");
while (true) {
String next = input.next();
try {
cw_Mark[i] = Integer.parseInt(next);
if (i >= 0 || i <= 100) {
break;
}
} catch (NumberFormatException e) {
}
System.out.println("Please Enter a Number Between 1 and 100");
}
}
Инкапсулируйте его в методе - что-то вроде ниже. И затем просто используйте метод для извлечения целых чисел от пользователя.
public static int getInt() {
System.out.print("Please enter an integer");
if (console.hasNext("stop")) {
System.out.println("***Terminated***");
System.exit(0);
}
while(!console.hasNextInt()) {
System.out.print("Input is not a valid integer!");
console.next();
}
int temp = console.nextInt();
while(temp<0 && temp>100) {
System.out.println("invalid input");
temp = console.nextInt();
}
return temp;
}
EDIT:
Это полное решение, если вы идете с этим подходом к блоку try-catch.
package standard;
import java.util.Scanner;
public class Main {
static Scanner console = new Scanner(System.in);
public static void main(String[] args) {
int[] cw_Mark = new int[6];
for (int i = 0; i < cw_Mark.length; i++) {
System.out.println("Please Enter Your Module " + (i + 1)
+ " Coursework Mark: ");
cw_Mark[i] = getInt();
}
}
//Gets the next integer from the console.
public static int getInt() {
System.out.print("Please enter an integer");
if (console.hasNext("stop")) {
System.out.println("***Terminated***");
System.exit(0);
}
while (!console.hasNextInt()) {
System.out.print("Input is not an integer!");
console.next();
}
int temp = console.nextInt();
while (temp <= 0 && temp >= 100) {
System.out.println("Input must be between 0 and 100");
temp = console.nextInt();
}
return temp;
}
}
Чтобы избежать выхода программы из исключения исключения, вы можете просто обернуть оператор ввода принимающего пользователя с помощью try / catch:
try {
cw_Mark[i] = input.nextInt();
} catch(InputMismatchException e) {
System.out.println("Entered value is not a number");
}
Это должно сделать это:
while(true)
{
try {
System.out.println("Please Enter Your Module " + (i+1) + " Coursework Mark: ");
cw_Mark[i] = input.nextInt();
if(cw_Mark[i}>=0&&cw_Mark[i]<=100)
break;
} catch(InputMismatchException e) {
System.out.println("Needs a number.");
}
System.out.println("Needs a number from 1 to 100");
}
Это приведет к сбою любых плохих значений и продолжит предлагать вашему пользователю дать вам правильные значения до тех пор, пока они этого не сделают.
Изменить: вам просто нужно вставить это в том месте, где у вас в настоящее время есть
System.out.println("Please Enter Your Module " + (i+1) + " Coursework Mark: ");
cw_Mark[i] = input.nextInt();
И вытащите чек на 0 - 100. Там ничего хорошего не делается, он не проверяет в нужном месте сделайте разницу.