Papasani Mohansrinivas Ответов: 4

Реализация программы викторины на java


я пишу программу для реализации "викторины" в java8.
сначала я объясню свой тест.
В классе викторин я должен добавить вопросы в arrayList и отобразить их.
В классе вопросов вы должны задать вопрос и его 4 варианта.
здесь я получаю исключение нулевого указателя во время компиляции. Вы бы записали свои вопросы в ArrayList и отобразили их во втором методе в классе викторин.
В меню, если вы выберете 1, вы получите добавить вопросы или тип 2, Вы можете получить список вопросов.Я все еще работаю над вопросами печати.

Что я уже пробовал:

import java.util.Scanner;
import java.util.*;

class Question{
	String question ;
	int no;
	HashMap<integer,string> options;
	String correctanswer;

	public static void  q_no(){
		System.out.println("enter a question no");
		int num;
		Scanner no = new  Scanner(System.in);
		num = no.nextInt();
	}
	public static void set_question(){
		System.out.println("enter aquestion");
		Scanner f = new Scanner(System.in);
		String question = f.nextLine();

	}
	public  void set_options(){
		System.out.println("enter options");
		int count =1;
		String q;
		Scanner str = new Scanner(System.in);
		while(count<5){
			System.out.print("set option "+count);
			q= str.nextLine();
			options.put(count,q);
			count++;
		}
	}
	public  void set_correctanswer(){
		System.out.println("enter correct answer");
		Scanner d = new Scanner(System.in);
		String ans = d.nextLine();


	}

	public static void marks(){

	}

               

}
class Quiz{
	ArrayList<question> list = new ArrayList<question>();
	public ArrayList<question> adding(Question q){
		list.add(q);
		return list;
	}
	public void show(){
		int g = list.size();
		int count =0;
		while(count<g){>
			list.get(count);
		}
	}
}

class Menu{
	public static void main(String[] args) {
		System.out.println("enter 1 for adding questions");
		Scanner input = new Scanner(System.in);
		int g;
		g= input.nextInt();
		if (g == 1){
			System.out.println("how many questions do you add");
			int number;
			Scanner b = new Scanner(System.in);
			Quiz programming = new Quiz();
			number = b.nextInt();
			int count=0;
			while(count<number){>
				Question q1 = new Question();
				q1.q_no();
				q1.set_question();
				q1.set_options();
				q1.set_correctanswer();
				programming.adding(q1);

			}
			


		}
		else if(g ==2){
			Quiz programming = new Quiz();
			programming.show();
			
		}

	}
}</question></question></question>

Patrice T

И компилятор не сказал вам, где эта ошибка ?

4 Ответов

Рейтинг:
2

Member 13744692

ПРОСТАЯ ИГРА В ПИНБОЛ


1 импорт javax.swing.*;
2 импорт java.awt.*;
3 импортируйте java.awt.event.*;
4

5 публичный класс Panel00 расширяет JPanel {
6 таймер t = новый таймер(1, новый слушатель());
7 int ctr = 0;
8 двойная G = 0,1; //гравитационная постоянная
9

10 final int xpos = 280;
11
12 double[] p2d = {280, 200};
13 double[] v2d = {0, 0};
14
15 int points = 0;
16 int жизней = 0;
17 int sides = 13;
18
19 двойной снорм = 400;
20 двойной sd = 450;
21 двойной sv = 0;
22 логический setlock = false;
23 логическое значение rdown, ldown;
24 двойное весло = 130;
25 двойная Рета = 0;
26 двойная лтета = 0;
27
28 int preset[][] = {
29 {0, 400, 135, 450,1}, //правое весло
30 {135, 450, 270, 400,1}, //левое весло
31 {270, 0, 300, 20, 1}, //первая надувная штука
32 {291, 0, 291, 500, 1}, //правая стена
33 {-1, 0, 270, 0, 1}, //верхняя стенка
34 {0, -1, 0, 500, 1} //левая стена
35 };
36

37 int[][] шары = {
38 {80, 80, 30, 50},
39 {230, 280, 20, 200},
40 {50, 200, 25, 100},
41 {200, 100, 10, 500}
42 };
43 int lines[][] = new int[100][5];
44
45 общественных Panel00(){
46 супер();
47 т. старт();
48 addKeyListener(новый ключ());
49 setFocusable(true);
50
51 for(int i = 0; i < preset.длина; i++){
52 строки[i] = предустановка[i];
53 }
54
55 int plen = предустановка.длина;
56
57 int ct = 0;
58 для(int k = 0; k < шариков.длина; k++){
59 int px = шары[k][0], py = шары[k][1], radius = шары[k][2];
60 для(double i = 0; i < 2 * Math.PI; i+= 2 * Math.PI/ стороны){
61 ct++;
62 линии[plen + ct][0] = px + (int) (radius * Math.cos(i));
63 линии[plen + ct][1] = py + (int) (radius * Math.sin(i));
64 линий[ПЛЭН + КТ][2] = РХ + (инт) (радиус * математика.потому что(я - 2 *математика.ПИ / стороны));
65 линий[ПЛЭН + КТ][3] = ру + (инт) (радиус * математика.грех(я - 2 * математика.ПИ / стороны));
66 }
67 }
68
69 }
70
71 прослушиватель частного класса реализует ActionListener {
72 public void actionPerformed(ActionEvent e){
73 перекрасить();
74 }
75 }
76
77 public void paintComponent(графика g){
78 super.paintComponent(g);
79 v2d[1] += G;
80 p2d[1] += v2d[1];
81 p2d[0] += v2d[0];
82
83

84
85 if(p2d[1] > 1000){
86 p2d[0] = 280;
87 p2d[1] = 200;
88 v2d[0] = 0;
89 v2d[1] = 0;
90 жизней++;
91 }
92 if(p2d[0] == 280 && p2d[1] > sd){
93 p2d[1] = sd;
94 v2d[1] = Math.min(v2d[1], sv);
95 }
96
97 if(setlock == false){
98 sv *= 0,95; //коэффициент демпфирования для упругости
99 sv -= (sd - snorm)/30;
100 sd += sv;
101 }
102 двойной rc = 0,1;
103 if(rdown){
104 rtheta = Math.max(-0.5, rtheta - rc);
105 }еще{
106 rtheta = Math.min(0.5, rtheta + rc);
107 }
108 if(ldown){
109 lteta = Math.max(-0.5, lteta - rc);
110 }еще{
111 lteta = Math.min(0.5, lteta + rc);
112 }
113
114 строки[0][2] = строки[0][0] + (инт) (математика.потому что(ltheta) * весло);
115 линий[0][3] = строки[0][1] + (инт) (математика.грех(ltheta) * весло);
116 линий[1][0] = строки[1][2] + (инт) (-математика.потому что(rtheta) * весло);
117 линий[1][1] = строки[1][3] + (инт) (математика.грех(rtheta) * весло);
118 int rX = (int) p2d[0];
119 int rY = (int) p2d[1];
120 int r = 10;
121 г. setColor(цвет.синий);
122 г. drawArc(rX - r, rY - r, 2 * r, 2 * r, 0, 360);
123 г. setColor(цвет.черный);
124 для(int i = 0; i < строк.длина; i++){
125 int x1 = строки[i][0],
126 y1 = линии[i][1],
127 x2 = линии[i][2];
128 двойной y2 = линии[i][3] + 0.0001;
129 if(i > preset.длина){
130 г. setColor(Цвет.Красный);
131 }
132 гр.drawLine(Х1, У1, Х2, (инт) математика.круг(У2));
133

134 двухместных адррес bmag = математика.функция sqrt(v2d по[0] * v2d по - [0] + v2d по[1] * v2d по[1]);
135 двойной линейный наклон = ((двойной)(x2 - x1))/((двойной)(y2 - y1));
136 двойной шаровой склон = v2d[0] / v2d[1];
137 //System.out.println(ballslope + "" + lineslope);
138 //xpos * ballslope + p2d[1] = xpos * lineslope + y1;
139 двойной бинтер = p2d[0] - шаровой склон * p2d[1];
140 двойной Линтер = x1 - lineslope * y1;
141
142 double y = (binter - linter)/(lineslope - ballslope);
143 двойной sx = y * ballslope + binter;
144 //двойной qx = y * lineslope + linter;
145 двухместных Ла = математика.инструмент atan2(У2 - У1 Х2 - Х1);
146 double ba = Math.atan2(v2d[1], v2d[0]);
147
148 двойной da = 2 * la - ba;
149
150 //System.out.println(sx + "" + y);
151 /*
152 г. drawLine((int)sx, (int)y, (int)p2d[0], (int)p2d[1]);
153 г. fillRect((int)sx - 2, (int)y - 2, 4, 4);
154 гр.drawLine((инт)p2d[0], (инт)p2d[1], (инт) (p2d[0] + математика.потому что(да) * 100), (инт)(p2d[1] + математика.грех(да) * 100));
155 //*/
156 если(ЗХ &ГТ;= математика.мин(Х2, Х1) и усилитель; & ЗХ &ЛТ;= математика.Макс(х1, х2) и усилитель; &
157 математика.мин(У1, У2) &ЛТ;= у &амп;&амп; математика.Макс(У1, У2) &ГТ;= г){
158 двухместных interdist = математика.корень(математика.военнопленных(ЗХ - p2d[0],2) + математика.пр(г - p2d[1],2));
159 двухместный крошечный = 0.0001;
160 двухместных futuredist = математика.корень(математика.военнопленных(ЗХ - (p2d[0] + математика.потому что(Ба) * крошечный),2) + математика.пр(г - (p2d[1] + математика.грех(ба) * крошечный),2));
161
162 если(interdist &ЛТ;= адррес bmag + Р &амп;&амп; futuredist &ЛТ; interdist){
163 //System.out.println("Carl Sagan" + i); //это каламбур, потому что он написал книгу под названием Contact
164 if(i > preset.длина){
165 int ball = (int) Math.floor((i - preset.длина)/стороны);
166 //System.out.println(шары[мяч][2]);
167 очков += шары[мяч][3] * bmag;
168 }
169 v2d[0] = Math.cos(da) * bmag;
170 v2d[1] = Math.sin(da) * bmag;
171 }
172 }
173 }
174 г. setColor(цвет.черный);
175 //System.out.println(sx + "" + qx);
176 //System.out.println(ballslope + "" + lineslope);
177 //двойной наклон = Math.atan2(v2d[1], v2d[0]);
178 //g.drawLine((int) p2d[0], (int) p2d[1], (int) (p2d[0]+10*v2d[0]), (int) (p2d[1]+10*v2d[1]));
179
180 г. fillRect(xpos - 5, (int)sd + 10, 10, 20);
181
182 г. шнурок("оценка:" + очки + "сброс:" + жизни, 10, 15);
183
184 }
185
186 ключ закрытого класса расширяет KeyAdapter {
187 public void keyPressed(KeyEvent e){
188 if(e.getKeyCode() == KeyEvent.VK_DOWN){
189 setlock = true;
190 sd += 2;
191 }
192 if(e.getKeyCode() == KeyEvent.VK_LEFT){
193 ldown = true;
194 }
195 if(e.getKeyCode() == KeyEvent.VK_RIGHT){
196 rdown = true;
197 }
198 }
199 public void keyReleased(KeyEvent e){
200 setlock = false;
201 if(e.getKeyCode() == KeyEvent.VK_LEFT){
202 ldown = false;
203 }
204 if(e.getKeyCode() == KeyEvent.VK_RIGHT){
205 rdown = false;
206 }
207 }
208 }
209 }


Patrice T

не по теме

Рейтинг:
1

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Рейтинг:
1

Richard MacCutchan

Одна очевидная проблема заключается в том, что ваш q_no метод (не уверен, что он должен делать) и set_question были объявлены static так что не имейте доступа к полям в вашем Question класс. Вы должны изменить его на:

public void set_question(){
    System.out.println("enter aquestion");
    Scanner f = new Scanner(System.in);
    question = f.nextLine(); // this will now set the instance variable to the string
    
}


Papasani Mohansrinivas

спасибо, но я продолжаю получать ошибку в методе set_options, а не set_questions

Richard MacCutchan

Какая ошибка? Пожалуйста, не ждите, что мы угадаем, что вы видите на экране.

Papasani Mohansrinivas

не могли бы вы предоставить решение для приведенного выше комментария

Рейтинг:
0

CPallini

Я исправил синтаксические ошибки (вы знаете Java является чувствительный к регистру не так ли?).
Я также исправил некоторые ошибки во время выполнения. Все-таки программа является неполным.

import java.util.Scanner;
import java.util.*;

class Question
{
  String question ;
  int no;
  HashMap<Integer,String> options;
  String correctanswer;

  public static void  q_no(){
    System.out.println("enter a question no");
    int num;
    Scanner no = new  Scanner(System.in);
    num = no.nextInt();
  }
  public static void set_question(){
    System.out.println("enter aquestion");
    Scanner f = new Scanner(System.in);
    String question = f.nextLine();

  }
  public  void set_options(){
    System.out.println("enter options");
    int count = 1;
    options = new HashMap<Integer, String>();
    String q;
    Scanner str = new Scanner(System.in);
    while(count<5){
      System.out.print("set option "+count);
      q= str.nextLine();
      options.put(count,q);
      count++;
    }
  }
  public  void set_correctanswer(){
    System.out.println("enter correct answer");
    Scanner d = new Scanner(System.in);
    String ans = d.nextLine();
  }

  public static void marks(){
  }
}
class Quiz
{
  ArrayList<Question> list = new ArrayList<Question>();
  public ArrayList<Question> adding(Question q){
    list.add(q);
    return list;
  }
  public void show(){
    int g = list.size();
    int count =0;

    //while(count<g){>
    //  list.get(count);
    //}
  }
}

class Menu{
  public static void main(String[] args) {
    System.out.println("enter 1 for adding questions");
    Scanner input = new Scanner(System.in);
    int g;
    g= input.nextInt();
    if (g == 1){
      System.out.println("how many questions do you add");
      int number;
      Scanner b = new Scanner(System.in);
      Quiz programming = new Quiz();
      number = b.nextInt();
      int count=0;
      while(count<number){//>
        Question q1 = new Question();
        q1.q_no();
        q1.set_question();
        q1.set_options();
        q1.set_correctanswer();
        programming.adding(q1);
        ++count;
      }
    }
    else if(g ==2){
      Quiz programming = new Quiz();
      programming.show();
    }
  }
}