2016-12-23 2 views
0

В классе программирования начинающих нам было назначено хранить метки классов, среднюю, самую низкую отметку, наивысшую отметку и т. Д.Можно ли выключить компьютер из java-кода?

Нам также было предложено выключить компьютер.

Я вывел меню, и одним из случаев было закрытие компьютера.

Однако он не работает. Метод 4 и метод 8 являются единственными, связанными с проблемой.

import javax.swing.*; 
import java.io.*; 

class ClassMarks { 

    String names[]; 
    int marks[]; 
    int counter; 
    String marksString; 

    final String PASSWORD = "Top Secret"; 
    String name, surname; 
    int mark; 

    int total; 
    double average; 

    //method to check password 
    public void checkPassword() { 
     int counter = 0; 
     String password_user; 
     do { 
      password_user = JOptionPane.showInputDialog("Enter password: "); 

      if (password_user.equals(PASSWORD)) { 

       JOptionPane.showMessageDialog(null, "Access Granted"); 
       outputMenu(); 
      } else { 
       JOptionPane.showMessageDialog(null, "Access Denied"); 
      } 
      counter++; 
     } while ((counter < 4) && !(password_user.equals(PASSWORD))); 
     JOptionPane.showMessageDialog(null, "No more attempts available"); 

    } 

    public void compulsoryMethod() { 

     String namesString = JOptionPane.showInputDialog("Enter number of students"); 
     int noOfNames = Integer.parseInt(namesString); 

     //print all the array elements 
     for (counter = 0; counter < noOfNames; counter++) { 
      names[counter] = JOptionPane.showInputDialog("Enter names"); 
      marksString = JOptionPane.showInputDialog("Enter Mark for" + names[counter] + " "); 
      marks[counter] = Integer.parseInt(marksString); 
     } 
    } 

    // method 4 
    public void outputMenu() { 
     int input; 
     do { 

      String stringInput = JOptionPane.showInputDialog("Choose the decision you want to make: \n\n 1.Enter marks \n 2. See marks \n 3.Find Average \n 4.See highest mark \n 5.See lowest mark \n 6.See any mark above average \n 7.Turn off this Pc/Laptop/any other device\n 8.See Grade"); 

      input = Integer.parseInt(stringInput); // to convert stringInput which is String to input which is int 

      switch (input) { 
       case 1: 
        enterMarks(); 
        break; 
       case 2: 
        viewMarks(); 
        break; 
       case 3: 
        averageMark(); 
        break; 
       case 4: 
        highestMark(); 
        break; 
       case 5: 
        lowestMark(); 
        break; 
       case 6: 
        markAboveAverage(); 
        break; 
       case 7: 
        shutDown(); 
        break; 
       case 8: 
        viewMarks(); 
        break; 

       default: 
        JOptionPane.showMessageDialog(null, "Invalid choice"); 
      } 
     } while (input != 7); 
    } 

    //method 3 
    public void enterMarks() { 

     String namesString = JOptionPane.showInputDialog("Enter no of students:"); 
     int noOfNames = Integer.parseInt(namesString); 

     names = new String[noOfNames]; 
     marks = new int[noOfNames]; 
     for (counter = 0; counter < marks.length; counter++) { 
      names[counter] = JOptionPane.showInputDialog("Enter names:"); 

      marksString = JOptionPane.showInputDialog("Enter Mark for " + names[counter] + " "); 
      marks[counter] = Integer.parseInt(marksString); 

     } 

    } 

    // method 5 
    public void viewMarks() { 

     for (counter = 0; counter < marks.length; counter++) { 
      JOptionPane.showMessageDialog(null, new JTextArea(names[counter] + "\t\t" + marks[counter] + "\t\t" + displayGrade(marks[counter]))); 
     } 
    } 

    //method 6 
    public void averageMark() { 
     int total = 0; 
     for (counter = 0; counter < marks.length; counter++) { 
      total = total + marks[counter]; 
     } 

     average = total/5; 
     JOptionPane.showMessageDialog(null, "Average is:" + average); 
    } 

    //method 7 
    public void highestMark() { 
     int large = 0; 
     int num; 

     // i starts from 2 because we already took one num value 
     for (int counter = 0; counter < marks.length; counter++) { 

      if (marks[counter] > large) { 
       large = marks[counter]; 
      } 
     } 
     JOptionPane.showMessageDialog(null, large); 
    } 

    //method 8 
    public void lowestMark() { 

     int small = 100; 
     int num; 

     for (int counter = 0; counter < marks.length; counter++) { 

      if (marks[counter] < small) { 
       small = marks[counter]; 
      } 

     } 
     JOptionPane.showMessageDialog(null, small); 

    } 

    //method 9 
    public void markAboveAverage() { 

     averageMark(); 

     for (int counter = 0; counter < marks.length; counter++) { 

      if (marks[counter] > average) { 

       JOptionPane.showMessageDialog(null, marks[counter] + ": This mark is above average"); 
      } else { 
       JOptionPane.showMessageDialog(null, marks[counter] + "This mark is below average"); 
      } 
     } 
    } 

    //method 10 
    public void (main String[]) throws IOException { 
     Runtime runtime = Runtime.getRuntime(); 
     Process proc = runtime.exec("shutdown -s -t 0"); 
     System.exit(0); 
    } 

    //method11 
    public char displayGrade(int marks) { 

     char grade = ' '; 
     if ((marks >= 0) && (marks <= 20)) { 
      grade = 'U'; 

     } 
     if ((marks >= 21) && (marks <= 40)) { 
      grade = 'E'; 

     } 

     if ((marks >= 41) && (marks <= 60)) { 
      grade = 'D'; 

     } 

     if ((marks >= 61) && (marks <= 80)) { 
      grade = 'C'; 

     } 

     if ((marks >= 81) && (marks <= 90)) { 
      grade = 'B'; 

     } 

     if ((marks >= 91) && (marks <= 100)) { 
      grade = 'A'; 

     } 

     return grade; 
    }  
} 
+1

Ваш код [не работает] (http://importblogkit.com/2015/07/does-not-work/)? –

+2

Нам нужно намного меньше кода и намного больше фоновой информации. Что происходит, когда вы пытаетесь запустить код выключения? Означает ли это конкретное сообщение об ошибке? Он ничего не делает и уходит? Это вызывает замораживание? Разве это заставляет ваш компьютер играть Радостью в мир? В какой операционной системе вы работаете? Mac (версия?) Linux (какой тип, какая версия?) –

+0

Robert Columbia - Вы всегда должны помнить, что я новичок, так что легко на меня :). Я запускаю эту программу на окнах, и эта ошибка вызывает ошибку: expected ---> public void (main String []) throws IOException { –

ответ

3

Вы можете использовать команду CMD, чтобы закрыть или перезагрузить компьютер, как

shutdown -s -t 10 

Вот способ закрыть и перезапустить компьютер, используя окна:

Выключайте компьютер:

public void shutdownPC(int time){ 
    try { 
     Runtime r = Runtime.getRuntime(); 
     // Shutdown system time mean, time to wait before my system will shutdow or restart 
     r.exec("shutdown -s -t " + time); 
    } catch (NumberFormatException | IOException e) { 
     JOptionPane.showMessageDialog(null, "Restart failed."); 
    } 
} 

Перезагрузите компьютер:

public void restartPC(int time){ 
    try { 
     Runtime r = Runtime.getRuntime(); 
     // Restart system 
     r.exec("shutdown -r -t " + time); 
    } catch (NumberFormatException | IOException e) { 
     JOptionPane.showMessageDialog(null, "Restart failed."); 
    } 
} 

Если вы используете Linux или Mac вы можете использовать эти две команды:

sudo poweroff 

и

sudo reboot 

Вы можете узнать о командной строке linux и mac


EDIT

Первый

Вы и ошибка в 4-метода в случае 7, потому что вы называете shutDown();, и это не существует в вашем коде, так что вы должны назвать правильный метод ,

Второй

Вы получите ошибку в главном методе public void (main String[]) throws IOException {, потому что он не создан правильно, так что вам нужно создать его так:

public static void main(String[] args) throws IOException { 
    //your code here 
} 

не забыл импортировать это import java.io.IOException;

Третий

А про два метода, которые я установил их в предыдущем ответе, вы должны сделать их статическими:

public static void shutdownPC(int time) {} 

public static void restartPC(int time) {} 

Четвертый

И называть их из метода 4, что вам нужно чтобы указать время перезагрузки или выключение компьютера таким образом:

case 7: 
    shutdownPC(5);//5 mean 5 second if you want to shut the pc imidattilly just set it 0 
    break; 

Надеюсь, это может вам помочь.

+0

Итак, я попробовал первый пример, но затем в меню появилось сообщение об ошибке в методе 2, говорящем, что он не может найти символ ... УМНЫЙ ВАМ Я СОЗДАЛ ОБЪЕКТ В SHUTDOWNPC, поэтому ошибка не связана с именем объекта. –

+0

Что вы имели в виду @NicholasBorg? какую ошибку вы получите в моем решении или что? –

+0

ошибка: не удается найти символ ... в методе 4 case 7 –

0

Я хотел бы добавить некоторые MrLy код, чтобы сделать программу очень умный

public static void shutdownPC(int time){ 
    try { 
     Runtime r = Runtime.getRuntime(); 
     // Shutdown system time mean, time to wait before my system will shutdow or restart 
     if(System.getProperty("sun.desktop").equalsIgnoreCase("windows")) 
     { 
      r.exec("shutdown -s -t " + time); 
     } 
     else 
     { 
      r.exec("sudo poweroff"); 
     } 
    } catch (NumberFormatException | IOException e) { 
     JOptionPane.showMessageDialog(null, "Restart failed."); 
    } 
} 
+0

ошибка: метод shutdownPC в классе ClassMarks не может применяться к данным типам; –

Смежные вопросы