Я думаю, вам просто нужны фигурные скобки вокруг ВСЕХ ваших утверждений if. Например,
import javax.swing.JOptionPane;
public class Grades
{
public String scoreToGrade( int score )
{
String grade = "";
if( score <= 100 )
{
if( score >= 90 ){
grade = "A";
return grade;
}
}
else if( score <= 89 )
{
if( score >= 80 ) {
grade = "B";
return grade;
}
}
else if( score <= 79 )
{
if( score >= 70 ) {
grade = "C";
return grade;
}
}
else if( score <= 69 )
{
if( score >= 60 ) {
grade = "D";
return grade;
}
}
else if( score <= 59 )
{
if( score >= 50 ) {
grade = "E";
return grade;
}
}
else if( score <= 49 )
{
if( score >= 0 ) {
grade = "F";
return grade;
}
}
else
{
grade = "Error: score " + score;
}
return grade;
}
public static void main( String[] args )
{
String input = JOptionPane.showInputDialog( "Score: " );
int score = Integer.parseInt( input );
Grades t = new Grades();
String grade = t.scoreToGrade( score );
JOptionPane.showMessageDialog( null,
"For " + score + " points, your grade is: " + grade );
}
}
Может быть, чего-то не хватает, хотя.
Это - потому что, когда значения трудно кодируются, это может искать статистика , это имеет на данных в таблице, и выясните лучший запрос для выполнения. Взгляните на планы выполнения каждого из этих запросов. Это должно сканировать когда Ваши переменные использования.
, если диапазон является всегда маленьким, Вы смогли использовать индексную подсказку для помощи этому.
Идентификатор в Индексе (например, Первичный ключ)? В противном случае попытайтесь добавить тот.
Другая вещь могла состоять в том, что в первом (быстром) экземпляре запрос становится выполняемым немного по-другому. Наиболее распространенная вещь, которую я видел, происходит, то, что соединения сделаны в неэффективном порядке. Попытайтесь переупорядочить соединения или преобразовать некоторых в подзапросы. Если Вы отправляете больше своего запроса, мы можем помочь далее.
Кажется, что этот запрос касается хранимой процедуры, ее план выполнения доберется в скомпилированный первый раз, когда proc выполняется и затем снова используется для последующего выполнения.
Его возможное, что скомпилированный план действительно плох для ситуаций, где firstid действительно близко к продлившемуся, однако его действительно хорошее, когда значения далеко друг от друга.
Попытка, разрешающая опцию WITH RECOMPILE на Вашем сохраненном proc. Если это решит вопрос, и Вы довольны proc быть перекомпилированным каждый раз ее выполняемый (то Вы поразите производительность), оставляют его там. Если Вы все еще недовольны производительностью, рассматривают перепроектирование proc, таким образом, этому не нужна перекомпиляция.
Хорошо,
, Моим запросом является Движение к библиотеке, и получите меня все книги между 3, и 5
Вы выбрали бы велосипедное право, быстрое, дешевое, эффективное и достаточно большое, чтобы принести 3 книги.
Новый запрос.
Переходят к библиотеке и получают все книги между @x и @y.
Выбор механизм.
Разрешение.
Это - то, что происходит. Вы выбираете самосвал в случае, если я прошу книги между 1 и Maxvalue? Это - излишество если x=3 и y=5. SQL должен выбрать план, прежде чем он будет видеть числа.
Забавный то, что этот код будет быстр также:
DECLARE @sql VARCHAR(8000)
SET @sql = 'SELECT * FROM table_x WHERE id BETWEEN ' + CAST(@firstId AS VARCHAR) + ' AND ' + CAST(@lastId AS VARCHAR)
EXEC (@sql)
(MSSQL 2000)
Если те переменные являются входными переменными для сохраненного proc, Вы могли бы сталкиваться с проблемой сниффинга параметра. http://omnibuzz-sql.blogspot.com/2006/11/parameter-sniffing-stored-procedures.html
На самом деле, на него очень хорошо ответили, я просто напишу здесь обходной путь, поскольку он сработал для меня:
Создайте хранимую процедуру с помощью SQL
WHERE id BETWEEN @firstId and @lastId
Затем вызовите сохраненную процедуру с помощью параметры @firstId и @lastId, и он ускорится. Я до сих пор не на 100%, почему он работает, но он работает.